[英]Reading From a File of Numbers Using RandomAccessFile Java
我的任务是使用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();
}
}
您正在将整数写为字符串(ps.print(i))。 如果您在文件中写入1,则您将写入1的ascii字符。假设这是我们写入的唯一数字,则文件只有一个字节。
阅读时,您正在使用raf.readInt()。 此方法读取4个字节并将其转换为整数。 如果现在尝试读取文件,则该文件仅包含一个字节(ascii字符为1),然后您将获得EOF例外。
使用相同类型的方法进行书写和阅读。 您可以使用FileOutputStream.write(int)进行编写。
RandomAccessFile.readInt()
从文件中读取一个32位二进制整数。 这意味着它将读取4个字节,并将这4个字节转换为一个int。 它不读取int的字符串表示形式。 阅读其javadoc 。
当您的raf指针从文件中读取时,有可能会命中“文件结尾”字符。 通过Java API:
“在此类中的所有读取例程中,通常来说,如果在读取所需的字节数之前已到达文件末尾,则会引发EOFException(这是IOException的一种)。”
http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.