java - 使用 File#length() 两个字节太多

标签 java file io size

我试图通过一个简单的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/

相关文章:

c - 在 C 中处理两个文件

file - 如何在 MATLAB 中将数据保存在 .txt 文件中

c++ - 加载一批图像 - 线程分配

java - 如何将选定行的值替换为现有文件java

java - 有没有办法在 Scala 中的方法参数中声明一组指定的值?

java - HTTP Apache - 如何在安全 cookie 的 header 中设置参数?

c++ - 如何忽略 C++ 文件中的空格

java - java流中的最佳 block 大小

java - 为什么老年代对象会被小 GC 清除

java - 将数据插入mysql数据库-java eclipse