缓冲读取器输出看起来与文件不同?

时间:2019-04-10 15:54:38

标签: java file-io bufferedreader reader

我的程序应该读取整个文件,它可以工作,但是当我将其输出到控制台时,开头会有一些奇怪的字符:

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文件)中,没有字符,所以它们从何而来?

1 个答案:

答案 0 :(得分:0)

您的文件以UTF-8 BOM(字节顺序标记)开头。

正如您在this Wikipedia page上看到的那样,BOM看起来与您使用非UTF-8编码(例如Windows-1252或ISO-8851-1)读取文件时所描述的完全相同。

更改代码以使用UTF-8读取文件,或将文件更改为不以UTF-8写入。

如果坚持使用UTF-8,请注意Java本身不支持UTF-8 BOM,因此您必须检查并自行删除。更好的是,将创建文件的代码更改为不编写BOM。某些文本编辑器可能会创建一个,但通常可以将其配置为不创建。

您还可以使用某些文本编辑器删除BOM表和/或更改编码,例如Notepad ++可以做到。