0

私の質問を明確にするために、テキスト コンテンツが既に含まれているコンピューターにあるテキスト ファイルに書き込んでいます。以下のコードは、内容を消去せずにテキスト ファイルに書き込みますが、書き込み先の行を指定したいと思います。現在、「Done」という単語が行内に存在するかどうかをキャッチする if ステートメントがあります。ファイルに書き込むため、認識されます。私の問題は、「完了」という行に書き込もうとしていることです。コードの一番下の最後の行に書き込みます。どうすればこれを修正できますか?

メソッド readNumLines は、ファイル内に含まれる行数です。Reading はテキストファイル名です。

int i = 0;
    BufferedReader reader = new BufferedReader(new FileReader(path+reading));
    BufferedWriter writer = new BufferedWriter(new FileWriter(path+reading, true));
    String line = null;
    while ((line = reader.readLine()) != null && i < readNumLines(reading)-1) {
        if(line.contains("Done")){
            writer.write("\nCHECK!\n");
            writer.close();
        }
        i++;
    }
4

3 に答える 3

1

ファイル全体を変数 (文字列、配列、またはリスト) に読み込むことをお勧めします。その後、特定の行を簡単に変更して、すべてをファイルに書き戻すことができます。

1) ファイルを配列に読み込む: テキスト ファイルの内容を 1 行ずつ配列に格納します。

2) 配列を操作します。

for (int i = 0; i < lines.length; i++) {
            String line = lines[i];
            if (line.contains("Done")) {
                lines[i] = line + "\nCHECK!\n";
                break;
            }
}

3) 文字列配列をファイルに書き込む: Java を使用して文字列配列をファイルに書き込む - 別々の行

この問題は、次の行にも関連している可能性があります。

writer.write("\nCHECK!\n");

最初の「\n」は、「CHECK」を強制的に新しい行に書き込みます。これは、「完了」行が最後の行であり、「\n」で終わっていないことを前提としています。

于 2014-10-23T20:15:07.067 に答える
0

Java 8を使用している場合は、次のようにしてください。

final Path myFile = Paths.get("path\\to\\yourFile.txt");
final int lineNumWhereToInsert = 2;
final String stringToInsert = "insertion test";

try {
    final List<String> lines = Files.lines(myFile).collect(Collectors.toList());
    lines.add(Math.min(lineNumWhereToInsert, lines.size()), stringToInsert);

    try (final BufferedWriter out = Files.newBufferedWriter(myFile, Charset.forName("UTF-8"))) {
        for (final String line : lines) {
            out.append(line).append(System.lineSeparator());
        }
    }
} catch (IOException) {
    ex.printStrackTrace();
}
于 2014-10-23T20:31:39.347 に答える
0

これが私のやり方です。アイデアは、新しい行を含むすべてを一時ファイルに書き込み、一時ファイルの名前を元のファイルに変更して元のファイルを削除するだけです。注: 私は自分のプロジェクトの 1 つからこのコード staigt を取得したため、何かを変更するのを忘れている可能性があります。うまくいかない場合はお知らせください。確認します。お役に立てれば :)

            String line;//You need to specify those
            File infile;

            // temp file
            File outFile = new File("$$$$$$$$.tmp");

            // input
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(inFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            BufferedReader in = new BufferedReader(new InputStreamReader(fis));

            // output         
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(outFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            PrintWriter out = new PrintWriter(fos);
            String thisLine = "";
            int i =1;
            try {
                while ((thisLine = in.readLine()) != null) {
                   if(in.contains("Done"))//the check for done 
                       out.println(line);                  
                   }
                   out.println(thisLine);
                   i++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            out.flush();
            out.close();
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            inFile.delete();
            outFile.renameTo(inFile);
于 2014-10-23T20:22:16.340 に答える