我的代码适用于将资产文件夹中的文件复制到SD卡。但每当我尝试再次复制时,它只是用新的文件替换旧文件而不是重命名它。我该如何解决?感谢
private void copyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
if (files != null) for (String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
File outFile = new File(getExternalFilesDir(null), filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// NOOP
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
// NOOP
}
}
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
}
答案 0 :(得分:1)
如果文件存在则覆盖文件是正常行为,使用fileObject.exists()
方法检查,如果文件存在则选择另一个文件名,您可以使用System.currentTimeMillis()
方法获取唯一后缀并将其添加到文件名。
答案 1 :(得分:0)
NaN答案是实现目标的方法之一,只需更改一行即可完成工作:
File outFile = new File(getExternalFilesDir(null), filename + System.currentTimeMillis());
另一种方法是增加 ad eternum 的文件大小,但如果你正在制作工具套装,那么这将无法满足你的需求。