从uri在SD卡上创建一个新文件?

时间:2013-05-12 14:13:41

标签: android file-io uri

我从Gellery Intent.ACTION_SEND_MULTIPLE意图获得了多个uri

我想要做的就是将这些文件复制到新位置" / sdcard / BACKUP /" 我已经尝试了几个小时没有解决方案

这是代码:

ArrayList<Uri> imageUris = null;

    if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {

         imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);


         String root =   Environment.getExternalStorageDirectory().getAbsolutePath()+"/";
         File createDir = new File(root+"BACKUP"+File.separator);
         if(!createDir.exists()) {
             createDir.mkdir();
         }

         for (Uri uri : imageUris){




        File file = new File(uri.getPath());    
             File newfile = new File(root + "BACKUP" + File.separator + uri.toString() +".jpg" );



             copyFile(file,newfile);


    }


private void copyFile(File sourceFile, File destFile) throws IOException {
     if (!sourceFile.exists()) {
         return;
     }

     FileChannel source = null;
         FileChannel destination = null;
         source = new FileInputStream(sourceFile).getChannel();
         destination = new FileOutputStream(destFile).getChannel();
         if (destination != null && source != null) {
             destination.transferFrom(source, 0, source.size());
         }
         if (source != null) {
             source.close();
         }
         if (destination != null) {
             destination.close();
         }


 }

我收到了java.io.Filenotfound异常

2 个答案:

答案 0 :(得分:0)

您只需要WRITE_EXTERNAL_STORAGE权限即可

sourceFile.renameTo(destFile);

renameTo的文档说

  

将此文件重命名为newPath。两者都支持此操作   文件和目录

你可以找到它here

答案 1 :(得分:0)

问题在于初始化源文件

这是有效的:

File file = new File(getPath(uri));

 public String getPath(Uri uri) 
    {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor == null) return null;
        int column_index =             cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String s=cursor.getString(column_index);
        cursor.close();
        return s;
    }

感谢大家的支持