如何从多个其他文本文件创建文本文件?

时间:2014-11-20 12:55:45

标签: java string bufferedreader filereader filewriter

我需要创建一个文本文件,它结合了同一文件夹中的任意数量的文本文件。需要通过main-method中的参数访问它们,以便查找我编写的文件名。最后一个文件名应该是目标文件。 到目前为止,我的代码正在创建一个新文件,其中包含我输入的最后一个字符串作为名称,但它是一个空文件。我怀疑我的BufferedReader课程没有做到应有的,但我不知所措。这是我的代码。首先是一个驱动程序类和实际程序。非常感谢您提供的任何帮助!

public class Driver {

    public static void main(String[] args)
    {
        CatFiles cat = new CatFiles(args);
        cat.bookCombiner();

}
}

这是出错的地方。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;

public class CatFiles {
    private String[] files;

public CatFiles(String[] files) {
    this.files = files;
}

public String getDest() {

    String destination = null;
    for (int i = 0; i < files.length; i++) {
        destination = files[i];
    }

    return destination;
}

public void bookCombiner() {
    BufferedReader reader = null;
    try {
        FileWriter writer = new FileWriter(getDest());
        for (int i = 0; i < files.length - 1; i++) {
            File file = new File(files[i]);
            String line = null;
            reader = new BufferedReader(new FileReader(file));
            if ((line = reader.readLine()) != null) {
                writer.write(files.length - 1);
            }

        }
        writer.close();

    } catch (Exception e) {
        System.out.println(e);
    } finally {
        try{
            reader.close();
        } catch(IOException e){
            e.printStackTrace();
        }
    }

}
}

3 个答案:

答案 0 :(得分:1)

你永远不会用编写器来写行。变化:

if ((line = reader.readLine()) != null) {
     writer.write(files.length - 1);
}

while ((line = reader.readLine()) != null) {
    writer.write(line);
}

答案 1 :(得分:0)

几个问题:

  • 您正在使用if ((line = reader.readLine()) != null)而不是将文件长度 - 1写入目标文件中。
  • 您正在使用writer.write(files.length - 1);写入上一个文件,该文件应为writer.write(line);

答案 2 :(得分:0)

你的getDest()方法可能有错误。现在它只返回files []数组中的最后一个元素。它相当于:

return files[files.length - 1];