0

タイトル:ファイル内の特定の行番号にデータを書き込む

これが私のサンプルファイルです:

public class MyC{
    public void MyMethod()
    {
        System.out.println("My method has been accessed");
        Syst.out.println("hi");
        String l;
        nt x=0;
    }
}

私の目的は何ですか?

5行目に移動して、文字列Syst.out.println( "hi");を修正します。System.out.println( "hi");へ これまで、エラーのある行にアクセスし、文字列を変数に保存してエラーを置き換えることができました。

これが私が今まで達成したことです:

import java.io.*;
public class NewReplaceLine {
    public static void main(String[] args)
    {
        FileInputStream fs = null;
        try {
            fs = new FileInputStream("C:\\Users\\workspace\\Compilers\\testfile.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
           e.printStackTrace();
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));
        for(int i = 0; i < 6; ++i)
            try {
                br.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        try {
        String lineIWant = br.readLine();
        String newtext = lineIWant.replace("Syst", "System");
        System.out.println(newtext);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

私ができないのは、行番号5に修正した文字列をファイルに書き直すことです。ありがとう

4

3 に答える 3

1

最初の一時ファイルからまだ読み取りを行っているため、2 番目の一時ファイルに書き込む必要があります。置換が完了し、ファイルが完全に書き出されたら、最初のファイルを削除し、2 番目のファイルの名前を変更します。

編集:

あなたのコメントによると、ファイルの内容に複数またはより複雑な変更を加えたい場合は、タスクを次の手順に分割できます。

  • FileInputStream を使用して、元のファイルの内容を入力ストリームとして読み取ります。
  • 入力ストリームを BufferedReader でラップする代わりに、入力ストリームの内容を読み取り、それらを ByteArrayOutputStream (出力ストリームのように機能するが内容をバイト配列としてメモリに保持するファイル) に書き込みます。
  • バイト配列をコンストラクター引数として使用して、新しい文字列を作成します
  • これで、元のファイルの内容全体を含む文字列がメモリに作成されました
  • その文字列に変更を加えたら、FileWriter を使用して 2 番目のファイルに書き出します。
  • File クラスを使用して元のファイルを削除し、もう一度出力ファイルの名前を変更します
于 2013-01-05T14:03:26.620 に答える
1

(サードパーティのライブラリがそうしない限り)それはできません(Javaだけでなく他の言語でも)。

ファイルへの読み取り/書き込みはシーケンシャル アクセスまたはランダム アクセスで行うことができますが、ランダム アクセスは行ではなくバイトで機能します (FS は、ファイルにテキスト データが含まれているかバイナリ データが含まれているかを認識しません)。そして、正しいバイトを見つけてそこに上書きすると、元の行にあったバイトをさらに追加すると、新しいバイトが上書きされます。

私が使用するオプションは、順次読み取り、新しいファイルにコピーし (新しい行を正しい位置に書き込むように注意して)、両方のファイルを閉じることです。その後、古いファイルを新しいファイルで上書きします。

于 2013-01-05T14:03:52.417 に答える
0

@Chris Gerkenファイルにさらにエラーがある場合、2、4、5、6、7行目とすると、次の行を処理した後、各行を次々に順番に書き込む方法を見つける必要があります。エラー)新しく作成されたファイルに?

于 2013-01-05T14:17:43.213 に答える