1

だから私はtxtファイルリーダーを作っています、そしてそれは素数ファインダープログラムであり、数字をtxtに書き込むので、ファイルには「長い」行がたくさんあります。プログラムを停止してから再起動すると、中断したところから開始したい。つまり、各行をチェックして、何かを読み取っていることを確認する必要があり、バッファリングされたリーダーが長くリストされていることを意味します。コードは次のとおりです。

try{
        FileReader fileReader = new FileReader(fileLocation);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        long stringRead = bufferedReader.read();

        while (stringRead != null)
        {
            stringRead = bufferedReader.read();
            currentNum =  stringRead;
        }

        bufferedReader.close();
        }
        catch(FileNotFoundException filenotfoundexxeption){
            System.out.print("file does not exist");
        }
        catch(IOException ioexception){
            ioexception.printStackTrace();
        }
}

だから問題は、それが好きではないということstringRead != nullです。それ以外の方法はわかりません。私は初心者なので、すでにリストされているコードを使用して回答してください。ありがとう!

4

7 に答える 7

3

あなたはおそらくやっているはずです

String line;
while ((line = bufferedReader.readLine()) != null)
{
    currentNum = Long.parseLong(line);
}

readLine()ファイルの終わりに達すると、Asは null を返します。

于 2012-04-15T20:46:00.217 に答える
2

Alongはプリミティブ型であるため、 にすることはできませんnull。一方、 aLongは参照型なので、 である可能性がありますnull

いずれにせよ、行全体ではなく、単一の文字を表すをBufferedReader#read()返します。と組み合わせて使用​​する必要があります。int#readLine()Long#parseLong()

代わりにa を使用することを検討しScannerてください。これにより、コードが大幅に簡素化されます。

Scanner scanner = new Scanner(new File(fileLocation));

while (scanner.hasNextLong())
{
    currentNum = scanner.nextLong();
}
于 2012-04-15T20:43:41.030 に答える
0

long はプリミティブであるため、null にすることはできず、BufferedReader.read は int を返すため、この行を変更するだけで機能させることができます

long stringRead = bufferedReader.read();

Integer stringRead = bufferedReader.read();

また

 Long stringRead = new Long(bufferedReader.read());

Java 1.5 以降では、自動的に int が Integer にラップされます。

于 2012-04-15T20:52:20.200 に答える
0

long を null にすることはできません。0 (初期化されていないか、0 が割り当てられている) か、そうでないかのいずれかです。で各文字を読み取るのではなく、readLineメソッドを使用して結果を long で解析することをお勧めします。Long.parseLong()read

于 2012-04-15T20:44:01.237 に答える
0

longプリミティブ データ型であり、null にすることはできません。初期化されていない場合は、0. Longただし、ラッパー クラスを使用できます。たとえばLong stringRead = new Long(bufferedReader.read());。ただし、あなたの場合、それがファイルの最後である場合でも決して返されないため、決してそうではありませんread()。だからあなたの小切手はnull-1while(stringRead!=-1)

于 2012-04-15T20:46:04.357 に答える
0

1行に1つの番号がありますか?で読み取るreadLine必要があります。これにより、行が文字列として表示されます。次に、それを で解析しLong.parseLongます。また、取得した文字列がreadLinenull でないことを確認できます。

于 2012-04-15T20:47:41.843 に答える
0

公式ドキュメントによると、 BufferedReader#read は int を返します。

0 から 65535 (0x00-0xffff) の範囲の整数として読み取られた文字、またはストリームの終わりに到達した場合は -1

つまり、返された が -1 に等しくないかどうかを確認できます。

于 2012-04-15T20:47:54.383 に答える