将文件从assets文件夹复制到android中的sd卡

时间:2016-03-31 03:58:20

标签: android

我的代码适用于将资产文件夹中的文件复制到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);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果文件存在则覆盖文件是正常行为,使用fileObject.exists()方法检查,如果文件存在则选择另一个文件名,您可以使用System.currentTimeMillis()方法获取唯一后缀并将其添加到文件名。

答案 1 :(得分:0)

NaN答案是实现目标的方法之一,只需更改一行即可完成工作:

File outFile = new File(getExternalFilesDir(null), filename + System.currentTimeMillis());

另一种方法是增加 ad eternum 的文件大小,但如果你正在制作工具套装,那么这将无法满足你的需求。