0

ファイルに書き込もうとしていますが、最初の行にレコードの総数を書き込む必要があり、while ループで他のすべての行を書き込む必要がありますが、すべて正常に機能していますが、最初の行にレコードの総数を書き込む必要があります。その、助けてください!! ありがとう!!

これが私のコードです:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;


public class headerline {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

         File folderall = new File("FilesIn1");
         File[] BFFileall = folderall.listFiles();

         for (final File file : BFFileall) {

                String str = file.getName();

                BufferedReader br = null;

                 BufferedWriter lbwp = null; 
                 BufferedWriter lb = null;

                try {

                    int lbwpcount = 1;
                    int lbcount = 1;

                     String reprintbwletterbwpca = (str);
                     lbwp = new BufferedWriter(new FileWriter(reprintbwletterbwpca));
                     lbwp.write("Total line number: " + lbwpcount);

                     String reprintbwletterbwpcalb = (str);
                     lb = new BufferedWriter(new FileWriter(reprintbwletterbwpcalb));
                     lb.write("Total line number: " + lbwpcount);

                     br = new BufferedReader(new FileReader(file));

                     String line;
                     line = br.readLine();



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

                            String[] actionID = line.split("|");

                            String actionid  = actionID[2];
                            String custnumber = actionID[3];

                            lbwp.write("ActionID: " + actionid + ",CustomerNumber: " + custnumber + "\r\n");
                            lbwpcount++;
                            lb.write("ActionID: " + actionid + ",CustomerNumber: " + custnumber + "\r\n");
                            lbcount++;
                    }
                     lbwp.close();
                     lb.close();

                } catch(Exception e1) {
                    e1.printStackTrace();
                }   

         }

    }

}

ファイルに 1201 行あると仮定すると、最初の行に Total line number: 1200 が表示されるはずです。"ActionID: " + actionid + ",CustomerNumber: " + custnumber .........

他のファイルに 1451 行あると仮定すると、最初の行に Total line number: 1450 と表示されるはずです。"ActionID: " + actionid + ",CustomerNumber: " + custnumber .........

どうすればいいのかわかりません、助けてください!! ループ終了後に最初の行を最後に書くことはできますか?? よろしくお願いします!!

4

4 に答える 4

2

java.nio.fileパッケージを使用するだけです。FilesメソッドreadAllLines(...)を持つクラスがあります。これにより、すべての行が読み取られ、List. 単にList.size()行数を取得するために使用し、必要に応じて別のファイルに書き込みます:-)

このプログラムを試してみてください。これにより、ファイル内の行数がわかります。

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

import java.util.List;

public class ReadAndWriteFile {

    private Path actualPath;
    private Path sourcePath;

    private BufferedReader reader;
    private BufferedWriter writer;

    private List<String> lines;

    public ReadAndWriteFile() {
        sourcePath = Paths.get("xanadu.txt");
        //sourcePath = sourcePath.toAbsolutePath();
        actualPath = Paths.get("xanadu_new.txt");
        //targetPath = actualPath.toAbsolutePath();

        Charset charset = Charset.forName("US-ASCII");

        try {   
            lines = Files.readAllLines(sourcePath, charset);
            System.out.println("Number of Lines : " + lines.size());
            reader = Files.newBufferedReader(sourcePath, charset);
            writer = Files.newBufferedWriter(actualPath, charset);

            String message = "Total Line Number : " + lines.size();
            writer.write(String.format("%s%n", message));
            for (String line : lines) {
                System.out.println(line);
                writer.write(String.format("%s%n", line));
            }
            reader.close();
            writer.close();
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ReadAndWriteFile();
    }
}

テキスト ファイル (xanadu.txt) の内容:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
于 2013-10-01T18:36:38.140 に答える
0

ここに高レベルの説明があります:

  1. すべての行をループして、List<Record>.
  2. あなたの要素の総数をList<Record>最初の行として書きます(これはレコードの総数になります)
  3. ループ内で、レコード データをファイルの残りの部分に書き込みます

最初に合計が必要なので、合計を調べるために 1 回ループする必要があります。次に、再度ループしてレコードを書き込みます。

于 2013-10-01T17:56:22.750 に答える
0

ファイルのすべての行を読み取るまで、合計行数を知ることはできません。

利用可能ないくつかのオプションは次のとおりです。

  1. ファイルを 2 回読み取ります。初めて、単純に行数を数えます。印刷してください。次に、もう一度ファイルを読み取り、現在行っているようにレコードを書き込みます。

  2. レコードを一時的にメモリに保持します。ファイルを読みながら、コンテンツをコレクション (例: ArrayList) に保持し、最後に書き出します。を使用list.size()してレコード数を取得できます。FileUtils.readLines()JAR 依存関係の導入を気にしない場合は、Apache Commons を使用してこれを行うことができます。編集: または、独自のメソッドを記述します (以下を参照)。

  3. その後にレコード数を追加します。ファイルを書き出してから、ファイルの先頭にレコード数を追加します。

  4. 要件に挑戦します。最初にレコード数を出力する必要があるかどうかを尋ねます。省略できますか?それは最後にあるでしょうか?等。

オプション 2 のサンプル コードを次に示します。これは、操作可能なリストにファイルを読み込む方法です。

public static List<String> readLines(File file) throws IOException {
    List<String> lines = new ArrayList<String>();
    BufferedReader br = new BufferedReader(new FileReader(file));
    try {
        String line;
        while ((line = br.readLine()) != null) {
            lines.add(line);
        }
    } finally {
        br.close();
    }
    return lines;
}

次のように使用します。

File file = new File("example.txt");
List<String> lines = readLines(file);

int lineCount = lines.size();
// TODO: Write out the line count

for (String line : lines) {
    // TODO: Process the line
}
于 2013-10-01T17:56:52.940 に答える
0

Apache Commons FileUtils.readLines()を使用できます。これにより、元のファイルのすべての行がリストとして返され、そこからサイズを取得できます。

そうしないと、最初にすべての行を手動で読み取ってカウントし、次にそれらをファイルに書き込む必要があります。

于 2013-10-01T17:59:33.880 に答える