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

Android 从uri在SD卡上创建新文件?,android,file-io,uri,Android,File Io,Uri,我从gellery Intent.ACTION\u SEND\u multiple Intent获得多个uri 我只想将这些文件复制到新位置“/sdcard/BACKUP/” 我已经试了好几个小时没有解决办法了 代码如下: ArrayList<Uri> imageUris = null; if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { imageUris

我从gellery Intent.ACTION\u SEND\u multiple Intent获得多个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();
         }


 }
ArrayList imageUris=null;
if(Intent.ACTION\u SEND\u MULTIPLE.equals(ACTION)&&type!=null){
imageUris=intent.getParcelableArrayListExtra(intent.EXTRA_流);
字符串root=Environment.getExternalStorageDirectory().getAbsolutePath()+“/”;
File createDir=新文件(root+“BACKUP”+File.separator);
如果(!createDir.exists()){
createDir.mkdir();
}
for(Uri:ImageURI){
File File=新文件(uri.getPath());
File newfile=新文件(root+“BACKUP”+File.separator+uri.toString()+“.jpg”);
copyFile(文件,新文件);
}
私有void copyFile(文件sourceFile、文件destFile)引发IOException{
如果(!sourceFile.exists()){
返回;
}
filechannelsource=null;
filechanneldestination=null;
source=新文件输入流(sourceFile).getChannel();
destination=新文件输出流(destFile).getChannel();
if(目标!=null&&source!=null){
destination.transferFrom(source,0,source.size());
}
如果(源!=null){
source.close();
}
if(目的地!=null){
destination.close();
}
}

我得到一个java.io.Filenotfound异常

您需要
写入外部存储
权限,您只需执行此操作即可

sourceFile.renameTo(destFile);
renameTo
的文档显示

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


您可以找到它

问题是初始化源文件

这就是成功的原因:

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;
    }

感谢大家的支持

在清单文件中添加了写入权限?记录您的新文件,其100%错误此文件createDir=new file(root+“BACKUP”+file.separator);应该是file createDir=new file(root+file.separator+“BACKUP”);root包含该文件seperator@Raghunandan是的,舱单上有