0

Javaプログラムの実行中にjava.lang.NullPointerExceptionエラーが発生し、それを読んだ後、エラーの意味を理解していると思いますが、それを修正する方法がまだわかりません。

import java.util.ArrayList;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;
public class readFile {


public static ArrayList<String> pullFirst(String fileName) throws IOException{
    String filen = "C:\\Users\\Steven\\Desktop\\Tests\\wunderground\\outputTweetsWeather.txt";
    ArrayList<String> arl = new ArrayList<String>(); // java 6 ArrayList 

    FileInputStream fs = new FileInputStream(filen); // this is how you access a file in java
    DataInputStream din = new DataInputStream(fs);
    BufferedReader bin = new BufferedReader(new InputStreamReader(din));

    String line;    
    while(!(line = bin.readLine()).startsWith("String index out of range")){ // read each line in the file while they exist
        arl.add(line);                // add them to the array list
    }

    return arl;                                  // return the array list
}

public static void main(String[] args, int j) {

    // this is just demo code to prove it works so you can check the output.
    try{
    ArrayList<String> rVal = pullFirst("testFile.txt");
        for(String a : rVal){
            //System.out.println(a + "\n"); // insert write to file code here
           if(a.startsWith("+t")){
       //          System.out.println(a);
           }
        }
        int i = 36;


        PrintStream out5 = new PrintStream(new FileOutputStream("forpopUp1.txt", true));

        System.setOut(out5);
     System.out.println(rVal.get(2 + j*i)); // Display Value


    }catch(Exception e){
        System.out.print("Problem in readFile" + e);
    }

}
}

今、私のメインラインが

public static void main(String[] args, int j) {

しかし、私が知っている限り、このクラスは別のクラスからのif条件が実行された後に実行されるため、このようにする必要があります。

readFile.main(args, counterForreadFile);

これは、StackTraceの結果です。

java.lang.NullPointerException
at readFile.pullFirst(readFile.java:22)
at readFile.main(readFile.java:33)

どんな助けでもいただければ幸いです!

4

2 に答える 2

2

エラーは、読み取ったファイルが使い果たされたときだと思います。

ファイルの読み取り中:

while(!(line = bin.readLine()).startsWith("String index out of range")){ 
  ...
}

ファイルが使い果たされると、BufferedReaderはに戻りnullます。

あなたがそうするとき、あなたは実際にこの場合(line=bin.readLine()).startsWith(..)に呼びかけようとします-そしてそれ故にエラー。startsWith()null

これを解決するには、次のように繰り返す必要があります。

while ((line = bin.readLine()) != null) { 
  if (line.startsWith("String index out of range")) break; 
  //rest of the code
}

これによりnull、リーダーが使い果たされたときの安全性が確保されます。

これは明らかに問題ですが、完全なスタックトレースを提供するまで、発生している問題が正確であるかどうかはわかりません。


PSコメントですでに述べたように、スタックトレース(問題に関する詳細情報を提供します)を取得すると、catchブロックに追加できるため、次のようになります。

}catch(Exception e){
    System.out.print("Problem in readFile" + e);
    e.printStackTrace();
}

別の方法は、として宣言main()し、ブロック(およびブロックも)throws Exceptionを削除することです。catchtry

于 2012-10-18T23:36:40.107 に答える
0

catch(Execption e)で置換

System.out.print("Problem in readFile" + e);

e.printStackTrace();

これは、回線エラーを示しています。

于 2012-10-18T23:44:23.040 に答える