Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除文件末尾的空行?_Java_File Io_Io_Opencsv - Fatal编程技术网

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

Java 如何删除文件末尾的空行?,java,file-io,io,opencsv,Java,File Io,Io,Opencsv,我有一个用于存储项目信息的文本文件 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 (repla

我有一个用于存储项目信息的文本文件

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();

    }
}
如何避免在末尾添加空行

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

也许你想插入一个测试,这样你就不会写期末考试了

System.getProperty(“line.separator”)


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

问题在于换行符,因此,您需要为
CSVWriter
构造函数发送换行符(最后一个参数),而不是
System.getProperty(“line.separator”)
,如下所示:

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

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

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


另一种可能是对输入文件进行hexdump,看看其中是否有额外的换行符。可能是这样的,读者把它当作一个额外的、空的记录,CSVWriter尽职尽责地把它写出来。如果是这样,您将需要写入逻辑,以便在读取列表后循环遍历列表,并在写入之前删除空的列表。我认为这才是真正的罪魁祸首。

在你写出来之前,csvBody是什么样子的?你可以用打印语句来查看。你能试试这个吗?CSVWriter writer=new CSVWriter(新文件编写器(archivoProductos),,,CSVWriter.NO_QUOTE_字符,CSVWriter.NO_转义_字符);我更新了帖子,你可以看到csvBody中没有空行,如果我删除了空行并想修改另一行,空行将返回@梅尔加蒂已经试过了,但没有成功:(@javaguy谢谢你一直帮助我!不幸的是,我现有的3行现在都写在了一行中。@javaguy很抱歉,让我检查一下
//Pass Empty string as line feed at the end
CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', 
                  CSVWriter.NO_QUOTE_CHARACTER,
                  CSVWriter.NO_ESCAPE_CHARACTER,"");