为什么我的程序没有从文件夹中提取文件

时间:2014-11-14 19:25:46

标签: java

我有一个程序,假设读取我文件夹中的所有文件,并将这些文件合并到文件中并将它们放入一个新文件夹中。有些文件没有被拉入,我不知道为什么。

文件名是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();
    }
  }
}

2 个答案:

答案 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本身已经足够好了。