在使用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();
}
}
}
但是结束输出文件只有一个结果,如何让它复制一切? 我认为缓冲编写器需要在循环中在现有的基础上编写新的?但不确定如何实现它。
非常感谢。
答案 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);