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();
       }
   }
}

但是结束输出文件只有一个结果,我如何让它复制所有内容?我在想缓冲写入器需要以某种方式进入循环以在现有写入之上写入新写入?但不确定如何实现。

非常感谢。

4

2 回答 2

2

每次调用 serialize 方法时,您都会覆盖文件内容,因为您没有以附加模式打开文件。为防止覆盖,请以以下模式打开文件append

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

但是,这是解决方案可能过度设计的一种情况。为了提高效率,您真的应该只打开一次文件。这是一个例子:

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 回答