我有一个代码来连接文件夹中的txt文件,并将连接文件移动到另一个文件夹中。 我的代码运行良好,但它连接后删除文件,所以我想在连接后将这些文件移动到另一个文件夹。
来自c:\ source的我的文件必须移动到c:\ Archive
这是我在开始的错误,我想移动文件,但我删除它们! 我想在源文件夹中没有文件时抛出异常。
所以我的代码是:
PrintWriter pw = new PrintWriter(new FileOutputStream("C:/Target/Filec.txt"));// directory where concatenated file are created
File file = new File("C:/Source");// where files have to be concatenated and move to c:\Archive before deleting
File[] files2 = file.listFiles();
for (int i = 0; i < files2.length; i++)
{
File currentFile = files2[i];
System.out.println("Processing " + currentFile.getPath() + "... ");
BufferedReader br = new BufferedReader(new FileReader(currentFile));
String line = br.readLine();
while (line != null)
{
pw.println(line);
line = br.readLine();
}
br.close();
if (!currentFile.delete())
{
// Failed to delete file
System.out.println("Failed to delete "+ currentFile.getName());
}
}
pw.close();
System.out.println("All files have been concatenated into Filec.txt");
}
}
谢谢
答案 0 :(得分:2)
要移动文件,请使用source.renameTo(targetFile)
。
如果源目录中没有文件,那么listFiles()
将返回一个空数组,所以只需检查并抛出。
此外,如果您只想盲目连接文件,则无需逐行读取,只需打开FileInputStream,将块读取到byte []并使用FileOutputStream进行写入。可能更高效,更简单。
答案 1 :(得分:1)
您可以像这样移动文件:
// File (or directory) to be moved
File file = new File("filename");
// Destination directory
File dir = new File("directoryname");
// Move file to new directory
boolean success = file.renameTo(new File(dir, file.getName()));
if (!success) {
// File was not successfully moved
}
答案 2 :(得分:1)
而不是 File.delete()使用FileUtils.moveFile()中的apache commons