如何创建File对象的独立完整副本?

时间:2011-11-28 16:40:55

标签: android file file-io android-file

官方Facebook App有一个错误,当您尝试与共享意图共享图像时,图像将从SD卡中删除。这是您使用图像的uri将图像传递到Facebook应用程序的方式:

File myFile= new File(Environment.getExternalStorageDirectory(), "car.jpg");
Uri uri = Uri.fromFile(myFile);
i.putExtra(Intent.EXTRA_STREAM, uri);

然后,假设如果我从原始myFile对象创建副本,并且我将副本的uri传递给Facebook应用程序,那么我的原始图像将不会被删除。

我尝试使用此代码,但它不起作用,原始图像文件仍然被删除:

    File myFile= new File(Environment.getExternalStorageDirectory(), "car.jpg");
    File auxFile=myFile.getAbsoluteFile();      
    Uri uri = Uri.fromFile(auxFile);

有人可以告诉我如何对不会重定向到原始文件的文件进行精确复制吗?

2 个答案:

答案 0 :(得分:1)

请检查:Android file copy

文件是逐字节复制的,因此不会保留对旧文件的引用。

答案 1 :(得分:1)

在这里,这应该能够创建文件的副本:

private void CopyFile() {

        InputStream in = null;
        OutputStream out = null;
        try {
          in = new FileInputStream(<file path>);
          out = new FileOutputStream(<output path>);
          copyFile(in, out);
          in.close();
          in = null;
          out.flush();
          out.close();
          out = null;
        } catch(Exception e) {
            Log.e("tag", e.getMessage());
        }       
}
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);
    }
}