0

.txt ファイルをアップロードしたときに次の行を読み取れない理由を教えてください。アップロードしようとするすべての .txt ファイルに発生し、次に system.out.println() を使用します。私のテキストファイルには、猫、犬、猿(それぞれ1行)が含まれています..しかし、出力される値は次のとおりです。

[Monkey][Monkey, null][Monkey, null, null][Monkey, null, null, null][Monkey, null, null, null, null][Monkey, null, null, null, null, null][Monkey, null, null, null, null, null, null]

これについて助けが必要です。ありがとうございました。

なぜ私は.docではなく.txtファイルを読むことができるのか疑問に思っています. これについてもアドバイスが必要です。

import java.awt.List;
import java.io.*;  
import java.util.ArrayList;

import javax.imageio.IIOException;
import javax.swing.JFileChooser;

public class searchforCapitalLetter {

     public static void main(String[] args) throws IOException{  


          try {  

                // file chooser
              JFileChooser chooser=new  JFileChooser();
            int returnVal = chooser.showOpenDialog(null);{
            if(returnVal == JFileChooser.APPROVE_OPTION)

            {   File f = chooser.getSelectedFile();}
            FileInputStream fin = new FileInputStream(chooser.getSelectedFile());
            DataInputStream din = new DataInputStream(fin);    
       BufferedReader br = new BufferedReader(new InputStreamReader(din)); 

    ArrayList<String>list =new ArrayList<String> ();

    if ((br.readLine()) != null) {
    while (br.readLine() != " ") {
        list.add(br.readLine());
        System.out.print (list);
    } br.close() ;
    }//closes if statement
     } // closes method dialog
                } // closes try method

         catch (FileNotFoundException e) {
                    e.printStackTrace();
                }     // closes catch method
            } // closes method body

} // closes class method
4

3 に答える 3

3

bufferedreader api ごと:

public String readLine() が IOException をスローする

1 行のテキストを読み取ります。行は、ライン フィード ('\n')、キャリッジ リターン ('\r')、またはキャリッジ リターンの直後のラインフィードのいずれかによって終了すると見なされます。

戻り値: 行終了文字を含まない、行の内容を含む文字列、またはストリームの末尾に到達した場合は null

例外: IOException - I/O エラーが発生した場合

コードでいくつかのエラーが発生していることに注意してください。

1) 戻り値をチェックするために readline() を 1 回呼び出し、戻り値を使用するために再度呼び出しています。最初の呼び出し (while 条件で) は、バッファーから現在の値を削除するため、1 行おきに削除されます。

2) 間違った比較を使用して、データが残っているかどうかを確認しています。x != y (x と y の両方がオブジェクトである場合) は、ポインターの等価性をチェックします - x が割り当てられるメモリ位置は、y が割り当てられるメモリ位置と同じです。本当に必要なのは、値を変数に格納することです。

例えば:

BufferedReader in = ...;
String s = in.readLine();
while(s!=null){
    ...
    s = in.readLine();
}
于 2012-08-07T04:26:31.803 に答える
1

.doc を使用できない理由は、.doc ファイルがフォーマットされているためです。そのため、コードがそれらから読み取るために解析する必要があるものがあります。

奇妙な印刷に関する限り、コードを印刷する前にコードを 2 回読み取ります (.readLine を呼び出すたびに、スキャナーは次の行に移動します)。次のコードを試してください。

ArrayList<String>list =new ArrayList<String> ();
String currentLine;
while ((currentLine = br.readLine()) != null) {
    list.add(currentLine);
    System.out.println(currentLine);
} br.close() ;
}

これにより、スキャナーを次の行に繰り返し移動するのではなく、変数の現在の行を追跡します。もう 1 つの問題は、ファイルの最後に到達したときに " " ではなく null になることでした。

于 2012-08-07T04:22:15.480 に答える