0

我从 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 异常

4

2 回答 2

0

你需要WRITE_EXTERNAL_STORAGE你可以简单地做的许可

sourceFile.renameTo(destFile);

医生renameTo

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

你可以在这里找到

于 2013-05-12T14:18:25.057 回答
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;
    }

谢谢大家的支持

于 2013-05-13T05:14:30.320 回答