2

テキスト ファイルに既存の行を追加するにはどうすればよいですか? 編集する行がファイルの途中にある場合はどうなりますか? 次のコードを考慮して、提案をお願いします。

以下を試してみました:

私のコード:

    filePath = new File("").getAbsolutePath();
    BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt"));
    try
    {                           
        String line = null;         
        while ((line = reader.readLine()) != null)
        {
            if (!(line.startsWith("*")))
            {
                //System.out.println(line);

                //check if target customer exists, via 2 fields - customer name, contact number
                if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber))))
                {
                    System.out.println ("\nWelcome (Existing User) " + line + "!");

                    //w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially
                    reader.readLine();
                    reader.readLine();
                    int total_no_of_bookings = Integer.valueOf(reader.readLine());

                    System.out.println (total_no_of_bookings);
                    reader.close();
                    valid = true;


                    //append total number of bookings (5th line) of target customer @ 'Customer.txt'
                    try {
                        BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt")));
                        writer.write(total_no_of_bookings + 1);
                        //writer.write("\n");
                        writer.close();
                    }
                    catch (IOException ex) 
                    {
                        ex.printStackTrace();
                    } 
                    //finally 
                   // {
                        //writer.close();
                    //}
                }                   
            }
        }       
4

4 に答える 4

2

既存のファイルにコンテンツを追加できるようにするには、ファイルを追加モードで開く必要があります。たとえば、FileWriter(String fileName, boolean append)trueを使用し、2 番目のパラメーターとして渡します。

行が途中にある場合は、ファイル全体をメモリに読み込み、すべての編集が完了したら書き戻す必要があります。

これは小さなファイルには有効かもしれませんが、ファイルが大きすぎる場合は、実際のコンテンツと編集されたコンテンツを一時ファイルに書き込むことをお勧めします。完了したら、古いファイルを削除し、一時ファイルの名前を同じ名前に変更します古いもの。

于 2013-11-09T19:45:59.410 に答える
1

おそらく、投稿した 2 番目のリンクへの回答のアドバイスに従う必要があります。ランダム アクセス ファイルを使用してファイルの途中にアクセスできますが、書き込み開始時にそこにあるものを記録せずにファイルの途中の任意の位置に追加を開始すると、現在の内容を上書きすることになります。この答え。問題のファイルが手に負えないほど大きい場合を除き、他の人が以前に提案したように、既存のファイルと新しいデータを使用して新しいファイルを組み立てることが最善の策です。

于 2013-11-09T19:57:49.323 に答える
1

reader.readLine() メソッドは、呼び出されるたびに行をインクリメントします。これがあなたのプログラムで意図されているかどうかはわかりませんが、一度だけ呼び出されるように、reader.readline() を文字列として保存することをお勧めします。

テキスト ファイルの途中に行を追加するには、行を追加するポイントまでテキスト ファイルを書き直してから、ファイルの残りの部分を書き始める必要があると思います。これは、ファイル全体を String 配列に格納してから、特定のポイントまで書き込むことで実現できる可能性があります。

記述例:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path)));
writer.write(someStuff);
writer.write("\n");
writer.close();
于 2013-11-09T19:47:19.280 に答える
0

私の知る限り、それはできません。つまり、行を追加することはできますが、途中に挿入することはできません。それはJavaや他の言語とは関係ありません...ファイルは書き込まれたバイトのシーケンスです...任意のポイントに何かを挿入すると、そのシーケンスはもはや有効ではなく、書き直す必要があります。

したがって、基本的には、読み取り-挿入-スライス-書き換えを行う関数を作成する必要があります

于 2013-11-09T19:46:37.490 に答える