这是一种在目录中复制所有文件的有效方法,包括子目录吗?有无限递归的机会吗?有什么我应该改变的吗?我知道它有效,但我认为应该有一种更简单的方法。
private void copy(File file, String path) {
String fileName = file.getPath();
System.out.println(fileName);
fileName = fileName.substring(fileName.lastIndexOf("\\"));
if (path == null)
path = Storage.getStorageDirectoryPath();
File toWrite = new File(path + File.separator + fileName);
if (file.isDirectory()) {
toWrite.mkdir();
File inDirectory[] = file.listFiles();
for (File f : inDirectory)
copy(f, toWrite.getPath());
} else {
try {
InputStream inStream = new FileInputStream(file);
OutputStream outStream = new FileOutputStream(toWrite);
byte buffer[] = new byte[1024];
int length = 0;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
由于
答案 0 :(得分:1)
评论表明看起来很不错。您可能希望查看新的Java 7 API(新的NIO)。有一个教程here,看起来甚至有选项可以避免跟随链接。
如果你不能使用Java 7,旧的NIO有通道,你可以用旧方式打开文件后打开。它们包括方法transferFrom和transferTo,可能能够比Java更有效地完成它。
答案 1 :(得分:0)
为什么重新发明轮子?看一下Apache Common FileUtils中的方法,特别是copyDirectory。