如何删除文件末尾的空行



我有一个用于存储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]

try so far:

不添加空行,但是我存在的3行现在写成一行。

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

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

System.getProperty (line.separator)

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

从稍微不同的角度来看,我会问你为什么要发送system . getproperty ("line.separator") -答案是你所在的系统使用的是行分隔符而不是换行符"n"。

我怀疑的是你正在使用的编辑器不能很好地处理不同的换行符。如果您使用的是*Nix系统(Linux、Unix、BSD、Mac等),运行"wc -l"来获得真实的行数,看看返回的是3还是4。否则,请尝试不同的编辑器。

另一种可能性是做输入文件的十六进制转储,看看它是否有一个额外的换行符。可能就是这种情况,读者把它当作一个额外的,空的记录,CSVWriter尽职尽责地把它写出来。如果是这样,您将需要编写逻辑,以便在读取List后循环遍历它,并在写入之前删除空的List。我想这才是真正的罪魁祸首。

问题是你的换行字符,所以不是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,"");

相关内容

  • 没有找到相关文章

最新更新