我需要创建一个文本文件,它结合了同一文件夹中的任意数量的文本文件。需要通过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();
}
}
}
}
答案 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];