我试图通过一个简单的java程序读取我用Mac的textEdit(纯文本)编写的文本文件。我的代码可以概括为:
public static void main(String[] args) {
File file = new File("test.txt");
long length = file.length(); // in my case 615
int i = 0;
while(i < length) {
try(FileInputStream fis = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(fis)) {
// NOTE: fis.available() == length
reader.skip(i);
System.out.printf("Character at position %d is %d\n", i, reader.read());
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
现在的问题是我的文件中只有 613 个字符,而 file.length()
返回 615。从该方法的输出中可以看出,读取的最后两个字符是 -1
。
我现在的问题是:这 2 个额外字节从哪里来?我可以从 length
中减去 2 来获取 ASCII 字符的数量吗?
如有任何帮助,我们将不胜感激
最佳答案
您可能有 2 个字符 byte order mark在文件的开头。有些编辑器会自动执行此操作。尝试使用十六进制编辑器打开该文件以查看这 2 个字符。
关于java - 使用 File#length() 两个字节太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384697/