0

ファイルの終わりに達したかどうかを確認しようとしましたが、空の文字列の条件は機能しません

public void readEquation(String fileName) {  
        File aFile = new File(fileName);
        String line = null;
        int cnt = 0;
        try {
            FileReader reader = new FileReader(aFile);
            BufferedReader bufferedReader = new BufferedReader(reader);
            while ((line = bufferedReader.readLine()) != null) {      
                //but line gets null
                intoMap(line, cnt);
                cnt++;
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
4

5 に答える 5

1

一度に1行ではなく2行を誤って読んでいます。ループの条件はそれ自体で行を読み取り、ループ内で別の行を読み取ります。この変更を提案します:

public void readEquation(String fileName) {  
        File aFile = new File(fileName);
        String line = null;
        int cnt = 0;
        try {
            FileReader reader = new FileReader(aFile);
            BufferedReader bufferedReader = new BufferedReader(reader);
            line = bufferedReader.readLine();
            while (line != null) {                  
                intoMap(line, cnt);
                cnt++;
                line = bufferedReader.readLine();
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
于 2012-06-10T15:08:25.427 に答える
0

これはあなたのために働くでしょう。

 while ((line = bufferedReader.readLine()) != null) {      

                    intoMap(line, cnt);
                    cnt++;
                }
于 2012-06-10T15:10:01.700 に答える
0

2 つの行を続けて読んでいます。1 つはループ条件で、もう 1 つはループの本体です。条件で読み取ったものは無視され、使用されることはありません。2 行目の値をチェックするものは何もありません。

通常、人々はこのループを次のように書きます。

while ((line = bufferedReader.readLine()) != null) {      
    intoMap(line, cnt);
    cnt++;
}

このようにして、使用する前に常に行を確認します。

于 2012-06-10T15:06:04.570 に答える
0
while ((bufferedReader.readLine()) != null) {      
                line = bufferedReader.readLine();    //but line gets null

ここで 2 行を読みます。

それを避けるには、次のように tmp String を使用します

String line=null;
while ((line=bufferedReader.readLine()) != null) {  
    //now line stores line from file or null if file doesn't have new line

編集 - 例

このコードをテストしました

    BufferedReader bufferedReader=null;
    try {
        String line = null;
        bufferedReader = new BufferedReader(new FileReader("d:\\ranks.txt"));
        while ((line=bufferedReader.readLine()) != null) {      
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

そしてそれはうまくいきました。

于 2012-06-10T15:06:07.447 に答える
0

コードの問題は、 while 条件で bufferedReader.readLine() を実行すると、すでに行を読み取っていることです。

これを行う必要があります:

public void readEquation(String fileName) {  
    File aFile = new File(fileName);
    String line = null;
    int cnt = 0;
    try {
        FileReader reader = new FileReader(aFile);
        BufferedReader bufferedReader = new BufferedReader(reader);
        while ((line = bufferedReader.readLine()) != null) {       // only reads once
            intoMap(line, cnt);
            cnt++;
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}
于 2012-06-10T15:07:31.123 に答える