我正在编写一个简单的函数,用于从 csv 文件中删除所有空白行:
import java.io.*;
import java.util.*;
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.io.FileWriter;
import java.io.PrintWriter;
public class WhiteSpace{
static List<String> AggAndGroupIndices = new LinkedList<String>();
public static void main(String[] args){
System.out.println("Pre-whitespace");
removeWhiteSpace("myFile");
System.out.println("Post-whitespace");
}
//////////////////////////////////////////////////////////////////////////////
public static void removeWhiteSpace(String csv_filename){
System.out.println("Whitespace removal activated");
Scanner file;
PrintWriter writer;
try {
file = new Scanner(new File(csv_filename));
writer = new PrintWriter("WhiteSpaceRemoval.csv");
System.out.println(file.hasNext());
System.out.println("About to enter while loop");
while (file.hasNext()) {
System.out.println("In while loop");
String line = file.nextLine();
if (!line.isEmpty()) {
writer.write(line);
writer.write("\n");
}
}
System.out.println("While loop complete");
file.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
这应该相对简单,但是,只要使用非标准字符(例如 é 或 Ç),它就会中断。即以下 csv 文件:
province,name,month
Quebec,Franois,February
工作完美,但是
province,name,month
Quebec,François,February
根本不会打印到 WhiteSpaceRemoval.csv 中。此外,根据我的检查,根本没有输入 while 循环,甚至没有在第一个有效行上输入。这让我感到困惑,我真的不知道可能出了什么问题。有谁知道这可能是什么?在 Linux 上运行。
如果你想过滤掉空行,你可以:
public List<String> filterNonEmptyLinesOnFile(String fileName) {
List<String> list = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
list = stream.filter(line -> !line.isEmpty())
.collect(Collectors.toList());
} catch (IOException e) { e.printStackTrace();
} finally { return list; }
}
我是一名优秀的程序员,十分优秀!