我的程序应该读取整个文件,它可以正常工作,但是当我将它输出到控制台时会有一些奇怪的字符:
try {
String name = null;
JFileChooser fc = new JFileChooser();
int approve = fc.showOpenDialog(null);
if (approve == JFileChooser.APPROVE_OPTION) {
name = fc.getSelectedFile().getAbsolutePath().toString();
}
File file = new File(name);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
StringBuilder sb = new StringBuilder();
String data;
while ((data = br.readLine()) != null) {
sb.append(data).append(" ");
}
br.close();
String readFile = sb.toString();
System.out.println(readFile);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error occured", "Error", JOptionPane.ERROR_MESSAGE);
}
控制台输出如下所示:
test 01.01.2018 tets test 12.03.2019
现在在我的文件(html文件)中选择IN,没有字符qazxsw poi所以它们来自哪里?
您的文件以UTF-8 BOM(字节顺序标记)开头。
正如您在
上看到的那样,BOM看起来与您使用非UTF-8编码(如Windows-1252或ISO-8851-1)读取文件时的描述完全相同。
更改代码以使用UTF-8读取文件,或将文件更改为不以UTF-8编写。
如果坚持使用UTF-8,请注意Java本身不支持UTF-8 BOM,因此您必须检查并自行删除它。更好的是,将创建文件的代码更改为不写入BOM。一些文本编辑器可能会创建一个,但您通常可以配置它们。
您还可以使用一些文本编辑器来删除BOM和/或更改编码,例如Notepad ++可以做到这两点。