如何删除文件末尾的空行?

时间:2016-11-13 22:38:31

标签: java file-io io opencsv

我有一个文本文件,用于存储Items的信息。

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,"");

3 个答案:

答案 0 :(得分:0)

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

System.getProperty(&#34; line.separator&#34)

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

答案 1 :(得分:0)

问题在于换行符,因此您需要将换行符(最后一个参数)发送为&#34;&#34;而不是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,"");

答案 2 :(得分:0)

好的,从一个稍微不同的角度来看,我会问你为什么要发送System.getProperty(&#34; line.separator&#34;) - 答案就是你所使用的系统使用除换行符之外的行分隔符&#34; \ n&#34;。

我怀疑的是你正在使用的编辑器没有很好地处理不同的换行符。如果您使用的是* Nix系统(Linux,Unix,BSD,Mac等),请运行&#34; wc -l&#34;得到一个真正的行计数,看看是否回来了三或四。否则尝试不同的编辑器。

另一种可能性是你输入文件的hexdump并查看它是否有一个额外的换行符。可能就是这种情况,读者将其作为一个额外的空记录,而CSVWriter正在尽职尽责地写出来。如果是这样,您需要编写逻辑以在读取后循环遍历List,并在写入之前删除那些空的。我认为这是真正的罪魁祸首。