1

私は今週Javaを学んだばかりで、先生はテキストファイル形式で保存されたHTTPリクエストを解析するように求めています。基本的に彼は、
「GET /fenway/ HTTP/1.0\r\n」と「Host: www.redsox.com\r\n」という行だけを抽出して、テキスト形式で保存するよう求めていました。エラーが含まれているため、私のプログラムはまだうまく動作しません。私がしたことは、テキスト ファイルを 1 行ずつ読み取り、それを関数に入力してバッファを読み取ろうとし、各単語をトークン化して copyGetWord に保存し、while ループを実行して単語「GET」がgetWord を arraylist に格納することがわかりました。

もう1つのことは、これにはJavaのみを使用することが許可されており、perlやpythonは使用できません. また、jnetpcap ライブラリを試してみましたが、インストールに問題があるため、テキスト ファイルが残っています。

誰でも助けてくれることを願っています。

これはサンプル テキスト ファイルです。

Transmission Control Protocol、Src ポート: bridgecontrol (1073)、Dst ポート: http (80)、Seq: 1、Ack: 1、Len: 270 Hypertext Transfer Protocol GET /azur/ HTTP/1.0\r\n 接続: Keep-Alive \r\n ユーザー エージェント: Mozilla/4.08 [en] (WinNT; I)\r\n ホスト: www.google.com\r\n

public static void main(String[] args) {

    System.out.println("Tries to read the samplepcap1.txt, \n");
    ReadingFile1 handle = new ReadingFile1();
    ArrayList <String> StoreLine = new ArrayList<String>();

    try{

        FileReader ReadPcap = new FileReader("samplePcapSmall.txt");
        BufferedReader bufferPcap = new BufferedReader(ReadPcap);

        String readBufLine = bufferPcap.readLine();
        StoreLine.add(readBufLine);

        while (readBufLine!=null){
            readBufLine = bufferPcap.readLine();

            handle.LookForWord(readBufLine);
        }

           bufferPcap.close();
    }
    catch (FileNotFoundException e){
        System.out.println("\nFile not found");
    }
    catch (IOException e){
        System.out.println("Problem reading the file.\n");
    }
}

public String LookForWord(String getWord){
    ArrayList <String>MatchingWord = new ArrayList<String>();
    StringTokenizer copyGetWord = new StringTokenizer(getWord," ");

    while (copyGetWord.hasMoreElements()){
        if(copyGetWord.nextToken().matches("GET")){
            MatchingWord.add(getWord);
        }    
    }
    System.out.println("\nMatch: "+MatchingWord);

    return getWord;
}

samplepcap1.txt の読み取りを試み、ArrayList に格納して ArrayList を表示します

Match: []

Match: [    GET /fenway/ HTTP/1.0\r\n]

Match: []

Match: []

Match: []
Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:182)
at java.util.StringTokenizer.<init>(StringTokenizer.java:204)
at readingfile1.ReadingFile1.LookForWord(ReadingFile1.java:84)
at readingfile1.ReadingFile1.main(ReadingFile1.java:62)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
4

1 に答える 1

1

while ループが問題です。代わりにこれを試してください:

String readBufLine = bufferPcap.readLine();

while (readBufLine!=null){
    StoreLine.add(readBufLine);
    handle.LookForWord(readBufLine);
    readBufLine = bufferPcap.readLine();
}

bufferPcap.close();

これは、バッファから行を読み取り、読み取り行が null でない間ループします。新しい行は常にループ本体の最後のアクションとして読み取られるため、ループの次の反復で読み取り行が null でないことが確認されます。トークン化を試みる前に。

于 2012-04-27T10:10:20.643 に答える