2016-11-13 96 views
2

我有一个文本文件,我用它来存储项目的信息。如何删除文件末尾的空行?

10325,Test1,Producto del Hogar,12,17 
10425,Test2,Videojuegos,11,17 
12345,Test3,Producto del Hogar,56,17.0 

我使用opencsv库修改所需的项目中的一列,我使用这个代码:

public void updateCSV(String replace, int fila, int col) throws IOException { 
    if (replace != null) { 
     File archivoProductos = new File("productos.txt"); 
     // Read existing file 
     CSVReader reader = new CSVReader(new FileReader(archivoProductos), ',', CSVWriter.NO_QUOTE_CHARACTER, 
       CSVWriter.NO_ESCAPE_CHARACTER); 
     List<String[]> csvBody = reader.readAll(); 
     // get CSV row column and replace with by using row and column 
     csvBody.get(fila)[col] = replace; 
     reader.close(); 
     // Write to CSV file which is open 
     CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', CSVWriter.NO_QUOTE_CHARACTER, 
       CSVWriter.NO_ESCAPE_CHARACTER, System.getProperty("line.separator")); 
     writer.writeAll(csvBody); 
     writer.flush(); 
     writer.close(); 

    } 
} 

的问题是,当修改完成后,有一个加空行在文本文件的末尾。

line1 10325,Test99,Producto del Hogar,12,17 
line3 10425,Test2,Videojuegos,11,17 
line2 12345,Test3,Producto del Hogar,56,17.0 
line4 

如何避免在最后添加空行? csvBody的

新增的println之前把它写到

[10325, Test99, Producto del Hogar, 12, 17] 
[10425, Test2, Videojuegos, 11, 17] 
[12345, Test3, Producto del Hogar, 56, 17.0] 

到目前为止已经试过:

不加空行,但现在我的3个存在行都写在短短的一线。

CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', 
        CSVWriter.NO_QUOTE_CHARACTER, 
        CSVWriter.NO_ESCAPE_CHARACTER,""); 
+0

csvBody在写出来之前看起来像什么?你可以使用打印语句来查看。 –

+0

你可以试试这个吗? CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos),',',CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER); – developer

+0

我更新了帖子,你可以看到csvBody中没有空行,如果我删除了空行并且想要修改另一行,空行就会回来。 @melgart –

回答

0

也许你想插入一个测试,所以你不写最后...

System.getProperty( “line.separator”)

...如果有没有更多的数据。或者,这可能执行得更快,只需在写入/保存文件之前修剪最后一个分隔符。

0

的问题是你的换行符,所以不是System.getProperty("line.separator"),您需要发送的换行(最后一个参数)为“”为CSVWriter构造如下图所示:

//Pass Empty string as line feed at the end 
CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', 
        CSVWriter.NO_QUOTE_CHARACTER, 
        CSVWriter.NO_ESCAPE_CHARACTER,""); 
+0

谢谢你继续帮助我!不幸的是,我现有的3行存在于1行中。@javaguy –

+0

对不起,让我检查一下 – developer

0

好了,所以在看它从一个稍微不同的角度,我会问你为什么要发送System.getProperty(“line.separator”) - 答案是,你所在的系统使用除换行符“\ n”以外的行分隔符。

我怀疑的是,你正在使用的编辑器没有很好地处理不同的换行符。如果您使用的是* Nix系统(Linux,Unix,BSD,Mac等),请运行“wc -l”以获得真正的行数,并查看是否会返回三个或四个。否则请尝试使用其他编辑器

另一种可能性是做一个你输入文件的十六进制转储,看看它是否有一个额外的换行符。情况可能就是这样,读者将其选为额外的空记录,并且CSVWriter会尽职尽责地写出来。如果是这样的话,您需要编写逻辑来在读取之后遍历列表,并在写入之前删除那些空的列表。我认为这是真正的罪魁祸首。