0

我有一个任务是使用 PrintStream 在文本文件中写入一些数字,然后使用 RandomAccessFile 从同一个文件中读取。虽然编写部分按预期工作,但在运行我的代码时会得到以下输出。

 807416096
840971040
874525984
Exception in thread "main" java.io.EOFException
908080928
941635872
at java.io.RandomAccessFile.readInt(RandomAccessFile.java:776)
at Problema4.main(Problema4.java:21)
Java Result: 1

这是代码:

import java.io.*;
import java.util.*;

public class Problema4 {

public static void main(String[] args) throws IOException, FileNotFoundException
{
    PrintStream ps = new PrintStream(new FileOutputStream("fisiernou.txt"));
    int i=0;
    while (i<11)
    {
        ps.print(i);
        ps.print(" ");
        i++;
    }
    ps.close();
    RandomAccessFile raf = new RandomAccessFile("fisiernou.txt", "r");
    raf.seek(0);
    //System.out.println(raf.readInt());
    while (raf.getFilePointer()<raf.length())
        System.out.println(raf.readInt());
    raf.close();
}

}
4

3 回答 3

2

您正在将整数写入字符串( ps.print(i) )。如果你写 1,在文件中你写的是 1 的 ascii 字符。假设这是我们写的唯一数字,那么文件只有一个字节。

阅读时,您使用的是 raf.readInt()。此方法读取 4 个字节并将它们转换为整数。如果现在你尝试读取你的文件,它只包含一个字节(1 的 ascii 字符),然后你会得到一个 EOF 异常。

使用相同类型的方法进行写作和阅读。您可以使用 FileOutputStream.write(int) 进行编写。

于 2012-11-01T20:50:58.743 回答
1

RandomAccessFile.readInt()从文件中读取一个二进制 32 位整数。这意味着它读取 4 个字节并将这 4 个字节转换为一个 int。它不读取 int 的字符串表示形式。阅读它的 javadoc

于 2012-11-01T20:49:39.800 回答
0

当您的 raf 指针从文件中读取时,可能会碰到“文件结尾”字符。从 Java API:

“对于此类中的所有读取例程,通常情况下,如果在读取所需的字节数之前到达文件结尾,则会引发 EOFException(这是一种 IOException)。”

http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html

于 2012-11-01T20:48:39.403 回答