我有一个程序,假设读取我文件夹中的所有文件,并将这些文件合并到文件中并将它们放入一个新文件夹中。有些文件没有被拉入,我不知道为什么。
文件名是wonder1.txt,wonder2.txt,wonder3.txt和wonder4.txt,文件夹名称是Alice,但实际上只有少数文件位于新文件夹中。
import java.io.*;
import java.util.Scanner;
import java.util.*;
import java.lang.*;
import java.io.PrintWriter;
public class alice {
public static void main(String[] args) throws FileNotFoundException, IOException {
File folder = new File("/Users/DAndre/Desktop/Alice");
//Reads in all the files in that folder
for (final File fileEntry : folder.listFiles()) {
String fileName = fileEntry.getAbsolutePath();
BufferedReader br = new BufferedReader(new FileReader(fileName));
try {
StringBuilder stringBuilder = new StringBuilder();
String line = br.readLine();
while (line != null) {
stringBuilder.append(line);
stringBuilder.append("\n");
line = br.readLine();
}
/**
* Pass original file content as string to another method which
* creates new file with same content.
*/
newFile(stringBuilder.toString());
} finally {
br.close();
}
}
}
public static void newFile(String fileContent) {
try {
String newFileLocation = "/Users/DAndre/Desktop/final/final_copy.txt";
PrintWriter writer = new PrintWriter(newFileLocation);
writer.write(fileContent);//Writes original file content into new file
writer.close();
System.out.println("File Created");
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
您的解决方案的问题在于您没有在追加模式下初始化PrintWriter,因为新文件会被写入的最后一个文件的内容覆盖。
public static void newFile(String fileContent) {
try {
String newFileLocation = "C:\\Users\\Shayan\\Desktop\\files2\\final_copy.txt";
PrintWriter writer = new PrintWriter(new FileOutputStream(new File(newFileLocation), true /* append = true */));
writer.write(fileContent);//Writes original file content into new file
writer.close();
System.out.println("File Created");
} catch (Exception e) {
e.printStackTrace();
}
}
FileOututStream的构造函数中的最后一个参数设置为true,表示它应该以追加模式打开。
答案 1 :(得分:0)
您需要更改
PrintWriter writer = new PrintWriter(newFileLocation);
到
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(newFileLocation, true)))
很少解释:追加意味着将其写成相加,相反写入会覆盖现有文件。在您的代码中,您正在创建一个包含其中一个奇迹的新文件,但在下一次迭代中,将重新创建该文件。所以先前奇迹的内容已经消失。
由于更改PrintWriter对象没有重新创建文件,而是将内容写入BufferedWriter,BufferedWriter也将流传输到可附加的FileWriter对象。
小建议:不要在每次迭代时创建一个PrintWriter对象。
第二个小建议:你不需要PrintWriter。就我看来,BufferedWriter本身已经足够好了。