0

你能解释为什么我的 2 方法 mergeFile() 和 mergeData() 不起作用,当我运行它时给我一个空白文本文件。我真的不明白为什么......这是我的代码:

String dirName, fileName;

public MergeFile(String dirName, String fileName){
    this.dirName = dirName;
    this.fileName = fileName;
}

public static void main(String [] args){
    MergeFile mf = new MergeFile("C:\\Users\\Shine\\Desktop", "C:\\Users\\Shine\\Desktop\\trung.txt");
    mf.mergeData();
}

public void mergeData(){
    for (int i = 0; i < createData().size(); i++){
        FileReader fr;
        BufferedReader br;
        FileWriter fw;
        BufferedWriter bw = null;
        try{
            fr = new FileReader(createData().get(i));
            br = new BufferedReader(fr);

            fw = new FileWriter(fileName);
            bw = new BufferedWriter(fw);

            String line;
            while ((line = br.readLine()) != null){
                bw.write(line);
            }
            br.close();
        }catch(IOException exp){
            exp.printStackTrace();
        }finally{
            try {
                if (bw != null){
                    bw.flush();
                    bw.close();
                }
            }catch(IOException exp){
                exp.printStackTrace();
            }
        }
    }
}

我的 createData 方法:

public ArrayList<File> createData(){
    File directory = new File(dirName);
    ArrayList<File> file = new ArrayList<>();
    if (directory.isDirectory()){
        for (int i = 0; i < directory.listFiles().length; i++){
            if (directory.listFiles()[i].getName().endsWith(".txt")){
                file.add(directory.listFiles()[i]);
            }
        }
        return file;
    }else{
        return null;
    }
}

我的合并文件方法:

public void mergeFile(){
    for (int i = 0; i < createData().size(); i++){
        try{
            FileInputStream fis = new FileInputStream(createData().get(i));
            FileOutputStream fos = new FileOutputStream(fileName);

            int counter;

            while((counter = fis.read()) != -1){
                System.out.println(counter);
                //fos.write(counter);
            }
            fos.flush();
            fos.close();
        }catch(IOException exp){
            exp.printStackTrace();
        }
    }
}
4

2 回答 2

0

编写函数后在循环本身内使用flush()函数

于 2014-01-22T03:27:44.207 回答
0

移动声明

FileReader fr;
BufferedReader br;
FileWriter fw;
BufferedWriter bw = null;

在循环之外。

于 2013-05-10T11:01:22.343 回答