如果我写这段代码,我会把它作为输出 - >第一个: 然后是其他行
try {
BufferedReader br = new BufferedReader(new FileReader(
"myFile.txt"));
String line;
while (line = br.readLine() != null) {
System.out.println(line);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我该如何避免呢?
答案 0 :(得分:17)
你在第一行得到了字符因为这个序列是UTF-8 byte order mark (BOM)。如果文本文件以BOM开头,则很可能是由记事本等Windows程序生成的。
要解决您的问题,我们选择将文件显式读取为UTF-8,而不是默认的系统字符编码(US-ASCII等):
BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream("myFile.txt"),
"UTF-8"));
然后在UTF-8中,字节序列解码为一个字符,即U + FEFF。此字符是可选的 - 合法的UTF-8文件可能也可能不以它开头。因此,只有当它是U + FEFF时才会跳过第一个字符:
in.mark(1);
if (in.read() != 0xFEFF)
in.reset();
现在,您可以继续使用其余代码。
答案 1 :(得分:1)
问题可能在于使用的编码。 试试这个:
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("yourfile"), "UTF-8"));