3
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;


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

        int count = 0;
        FileReader fr = new FileReader("file.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;

        while ((line = br.readLine()) != null){
            //System.out.println(br.readLine());
            count++;
        }
        String []readArray = new String[count];

        for(int i = 0; i < readArray.length; i++){
            readArray[i] = br.readLine();
            System.out.println(readArray[i]);
        }

    }
}

テキスト ファイルから新しい配列にデータを書き込むことができません。配列に値が入力されることはありません。このデータが必要なのは、配列に書き込み、いくつかのアイテムを削除して、新しいテキスト ドキュメントを吐き出すことだけです。

4

7 に答える 7

2

あなたがしていることは次のとおりです。ファイルを一度完全に読み取ってから、同じBufferedReader. したがって、2 番目のループでは、既にファイルの最後に到達しているため、何も得られません。

したがって、最初のループの後、BufferedReader を閉じて別のものを作成します。または、次のようにします。

    FileReader fr = new FileReader("file.txt");
    BufferedReader br = new BufferedReader(fr);
    String line;

    List<String> list = new ArrayList<String>();
    while ((line = br.readLine()) != null){
        list.add(line);
    }
    br.close();
    // do whatever you have to with this list

これで、このリストから要素を追加/削除して書き込むことができます。

于 2013-08-29T18:00:16.457 に答える
1

他の人はあなたのコードのどこが間違っていたのかをすでに説明しています。私は別のオプションを提示するだけです。

Java 7 を使用していて、ファイルが大きすぎない場合は、ファイルのすべての行を直接List.

Path filePath = Paths.get("path to your file");
try {
    List<String> contentOfTheFile = Files.readAllLines(filePath,
            Charset.defaultCharset());
} catch (IOException e) {
    //Handle exception here
}
于 2013-08-29T23:31:19.337 に答える
0

問題は次のとおりです。

    while ((line = br.readLine()) != null){
        //System.out.println(br.readLine());
        count++;
    }

そのコードは、最後に到達するまでカーソルをファイル内で移動しています。

このコードにたどり着くまでに:

    for(int i = 0; i < readArray.length; i++){
        readArray[i] = br.readLine();
        System.out.println(readArray[i]);
    }

カーソルはすでにファイルの最後にあります。

代わりに、次のようにします。

    List<String> lines = new ArrayList<String>();
    while ((line = br.readLine()) != null){
        lines.add(line);
        count++;
    }

何らかの理由で配列として保存する必要がある場合は、最後にこれを使用できます。

String[] lineArray = lines.toArray(new String[0]);
于 2013-08-29T18:04:36.860 に答える
0
while ((line = br.readLine()) != null){
    //System.out.println(br.readLine());
    count++;
}

これにより、データを再度配置することなく、最後までファイルが読み取られます。

このループで readLine() を再度呼び出すと、

for(int i = 0; i < readArray.length; i++){
    readArray[i] = br.readLine();
    System.out.println(readArray[i]);
}

すでにファイルの最後にいるため、br には何も残っていません。

于 2013-08-29T18:00:30.290 に答える
0

カウントのためにファイルを最後まで読み取った場合は、ファイルを閉じてから再度開き、リーダーをファイルの先頭に再度配置する必要があります。

または、配列を使用する代わりに、@SotiriosDelimanolis がコメントで提案したように、リストを使用します。これは、事前に長さを知る必要はありません。各行を追加するだけです。

于 2013-08-29T18:01:26.113 に答える