2

以前、Javaを使用したI/Oについて同様の質問をしました。

文字列のリストを別のファイルにコピーしようとしています。

package file;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class File {

    public static void main(String[] args) {

                FileWrite fW = new FileWrite();

                try (BufferedReader br = new BufferedReader(new FileReader("B:\\inLarge.dat")))
        {

            String stCurrent;

            while ((stCurrent = br.readLine()) != null) {
                System.out.println(stCurrent);
                                fW.serializeAddress(stCurrent, stCurrent);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } 


                //fW.serializeAddress("Boston", "Canada");
    }
}

package file;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.io.File;
import java.io.IOException;

public class FileWrite {

   public void serializeAddress(String city, String country){

       try
           {

               File file = new File("B:\\outLarge.txt");

               if (!file.exists()) 
                        {
                file.createNewFile();
            }

               FileWriter fw = new FileWriter(file.getAbsoluteFile());
               BufferedWriter bw = new BufferedWriter(fw);
               bw.write(city + " " + country);
               bw.close();

            System.out.println("Done");



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

しかし、最後の出力ファイルの結果は1つだけです。どうすればすべてをコピーできますか?私はバッファリングされたライターが既存のものの上に新しいものを書くためにどういうわけかループにいる必要があると思っていますか?しかし、それを実装する方法がわかりません。

どうもありがとう。

4

2 に答える 2

2

追加モードでファイルを開かなかったため、serializeメソッドを呼び出すたびにファイルの内容が上書きされます。上書きを防ぐには、次のappendモードでファイルを開きます。

FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);

ただし、これは、ソリューションがおそらく過剰に設計されている1つのケースです。効率を上げるには、ファイルを1回だけ開く必要があります。次に例を示します。

public static void main(final String[] args) {
    try {
        final BufferedReader reader = new BufferedReader(new FileReader("infile.txt"));
        final PrintWriter writer = new PrintWriter(new File("outfile.txt"));

        String inputLine;

        while((inputLine = reader.readLine()) != null) {
            writer.println(inputLine);
        }

        reader.close();
        writer.close();
    } catch(final Exception e) {
        e.printStackTrace();
    }
}
于 2013-01-15T22:17:40.853 に答える
2

既存のファイルを開くたびに上書きします。代わりにそれに追加します。変化する

FileWriter fw = new FileWriter(file.getAbsoluteFile());

FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
于 2013-01-15T22:17:45.563 に答える