我想写一个函数副本(File f1,File f2) f1始终是一个文件。 f2是文件或目录。
如果f2是一个目录,我想将f1复制到这个目录(文件名应该保持不变)。
如果f2是文件,我想将f1的内容复制到文件f2的末尾。
例如,如果F2有内容:
2222222222222
F1有内容
1111111111111
我复制(f1,f2)然后f2应该变成
2222222222222
1111111111111
谢谢!
答案 0 :(得分:17)
Apache Commons IO to the rescue!
扩展Allain的帖子:
File f1 = new File(srFile);
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2, true); // appending output stream
try {
IOUtils.copy(in, out);
}
finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
使用Commons IO可以简化很多流grunt的工作。
答案 1 :(得分:5)
使用Allain Lolande的答案中的代码并进行扩展,这应该解决你问题的两个部分:
File f1 = new File(srFile);
File f2 = new File(dtFile);
// Determine if a new file should be created in the target directory,
// or if this is an existing file that should be appended to.
boolean append;
if (f2.isDirectory()) {
f2 = new File(f2, f1.getName());
// Do not append to the file. Create it in the directory,
// or overwrite if it exists in that directory.
// Change this logic to suite your requirements.
append = false;
} else {
// The target is (likely) a file. Attempt to append to it.
append = true;
}
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(f1);
out = new FileOutputStream(f2, append);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
} finally {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
}
答案 2 :(得分:2)
FileOutputStream有一个构造函数,允许你指定append而不是覆盖。
您可以使用它将f1的内容复制到f2的末尾,如下所示:
File f1 = new File(srFile);
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2, true);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
答案 3 :(得分:1)
请查看以下链接。它是一个源文件,使用NIO将文件复制到另一个文件。
http://www.java2s.com/Code/Java/File-Input-Output/CopyafileusingNIO.htm