Android 从uri在SD卡上创建新文件?
我从gellery Intent.ACTION\u SEND\u multiple Intent获得多个uri 我只想将这些文件复制到新位置“/sdcard/BACKUP/” 我已经试了好几个小时没有解决办法了 代码如下: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
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是的,舱单上有