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

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 に答える