使用RandomAccessFile Java从数字文件中读取

时间:2012-11-01 20:41:33

标签: java printstream

我有一个任务是使用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();
}

}

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

当您的raf指针正在从文件中读取时,可以点击“文件结束”字符。来自Java API:

“对于此类中的所有读取例程,如果在读取所需的字节数之前达到文件结尾,则抛出EOFException(这是一种IOException)。”< / p>

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