make输出如何有多个字符串(Java)

时间:2013-01-15 22:15:29

标签: java

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

但是结束输出文件只有一个结果,如何让它复制一切? 我认为缓冲编写器需要在循环中在现有的基础上编写新的?但不确定如何实现它。

非常感谢。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:2)

每次打开时都会覆盖现有文件。取而代之的是append。 改变

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

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