Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用文件#length()时超过两个字节_Java_File_Io_Size - Fatal编程技术网

Java 使用文件#length()时超过两个字节

Java 使用文件#length()时超过两个字节,java,file,io,size,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(F

我试图通过一个简单的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();
        }
    }
}
publicstaticvoidmain(字符串[]args){
File File=新文件(“test.txt”);
long length=file.length();//在我的例子中是615
int i=0;
while(i
现在的问题是,我的文件中只有613个字符,而
file.length()
返回615。从该方法的输出中可以看出,读取的最后两个字符是
-1

我现在的问题是:这两个额外的字节可能来自哪里?我可以从
长度中减去2来获得ASCII字符数吗


任何帮助都将不胜感激。

通常有结束标记字符(或开始标记字符)

第一个:它似乎是文本(来自文本编辑器?)

第二:你得到的是二进制内容

filesize是操作系统上文件的大小。它可能取决于文件类型和操作系统。例如,unicode文件在开始时有BOM表

您的实际大小是使用FileInputStream(以字节数组形式)获得的

然后我认为613个字符就足够了,这正是你得到的

见此:


有帮助吗?

通常有结束标记字符(或开始标记字符)

第一个:它似乎是文本(来自文本编辑器?)

第二:你得到的是二进制内容

filesize是操作系统上文件的大小。它可能取决于文件类型和操作系统。例如,unicode文件在开始时有BOM表

您的实际大小是使用FileInputStream(以字节数组形式)获得的

然后我认为613个字符就足够了,这正是你得到的

见此:


有帮助吗?

文件开头可能有2个字符。有些编辑器会自动执行此操作。尝试用十六进制编辑器打开文件以查看2个字符。

文件开头可能有2个字符。有些编辑器会自动执行此操作。尝试用十六进制编辑器打开文件以查看2个字符。

似乎太明显了:textEdit将“…”转换为某个unicode字符,使ASCII假设无效。

似乎太明显了:textEdit将“…”转换为某个unicode字符,使ASCII假设无效。

恐怕我真的不明白。你是说我的文本中有一些unicode字符吗?你说“你得到的是二进制内容”是什么意思?恐怕我不太明白。你是说我的文本中有一些unicode字符吗?你说“你得到二进制内容”是什么意思?我做到了,前面没有添加任何内容,但我已经发现了我的错误。TextEdit将“…”转换为某种unicode字符,使得ASCII假设无效。我这样做了,前面没有添加任何内容,但我已经发现了我的错误。TextEdit将“…”转换为某些unicode字符,使ASCII假设无效。您的代码根本不涉及ASCII<代码>InputStreamReader
:。如果您认为文件包含ASCII编码的文本(不太可能),则应将其传递给InputStreamReader构造函数。您的代码根本不涉及ASCII<代码>InputStreamReader
:。如果您认为文件包含ASCII编码的文本(不太可能),则应将其传递给InputStreamReader构造函数。