【问题标题】:Output is a blank text file输出是一个空白文本文件
【发布时间】:2023-03-23 23:29:01
【问题描述】:

你能解释一下为什么我的 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;
    }
}

我的 mergeFile 方法:

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

【问题讨论】:

  • 想知道这是 C# 吗?还是 Java?
  • System.out 看起来不像是 C#

标签: java bufferedreader bufferedwriter


【解决方案1】:

移动声明

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

在循环之外。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2022-01-08
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多