我正在将一个CSV文件解析到我的JTable中。问题是每次我的第一张唱片前都会出现一些奇怪的符号。这是我的代码:
JFileChooser chooser=new JFileChooser();
chooser.showOpenDialog(null);
File f=chooser.getSelectedFile();
String filename=f.getAbsolutePath();
pathF.setText(filename);
try {
FileReader fr=new FileReader(f);
BufferedReader br= new BufferedReader(fr);
DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
Object [] lines=br.lines().toArray();
for(int i=0;i<lines.length;i++){
String []row=lines[i].toString().split(";");
model.addRow(row);
}
所以一切都很好,但是在第一个记录的前面出现了奇怪的符号。这是输出:
如您所见,i10前面有一个空的正方形。可以肯定的是,这是一个字符,但是我如何摆脱它,因为由于有了这个字符,程序假设i10和(square)i10是不同的人。我还用System.out.println(lines[i].toString());
检查了一下,结果是:
您可以从第一行的开头清楚地看到不需要的符号。我该如何解决?
答案 0 :(得分:3)
它称为BOM(字节顺序标记)。它标志着流的开始,您可以使用Apache Commons csv库的BOMInputStream将其删除。使用该库可以读取和解析csv,它要简单得多,并提供许多功能。
类似这样的东西:
BOMInputStream bis = new BOMInputStream(file.getInputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(bis,StandardCharsets.UTF_8));
使用Apache Commons的示例:https://www.callicoder.com/java-read-write-csv-file-apache-commons-csv/