新建文件(uri.toString())返回文件未找到。

3

我有一个URI,我想从这个URI创建一个文件:

fileUri = file:///mnt/sdcard/20120904_162830.png;

File fichero = new File(fileUri.toString();

这个方法运行良好,但是当我尝试创建使用fichero.exist() = false时出现问题。

我该如何从fileUri创建一个文件?

解决方案:

fichero = new File(fileUri.getPath());//for camera
                    if (!fichero.exists()) {
                        fichero = new File(getRealPathFromURI(fileUri));//for gallery
                    }


public String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        @SuppressWarnings("deprecation")
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
3个回答

1

试试这个:

File fichero = new File(fileUri.getPath());

1
如果我从图库意图中获取文件,则无法使用,但是如果我拍照,则可以。 - rbrlnx
当您执行android.util.Log.v("FILE", "-->["+fichero.getAbsolutePath()+"]");时会发生什么?是否打印出正确的路径?像@gtumca-MAC指出的那样,您是否拥有WRITE_EXTERNAL_STORAGE权限?文件实际上是否存在? - Femi
在清单文件中写入“write_external_storage”,该文件存在,因为我从Android图库中选择了它,文件路径为“/external/images/media/68”。 - rbrlnx

0
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File output = new File(dir,"20120904_162830.png");

将此权限添加到清单文件中...

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

编辑:

String filename= output.getAbsolutePath();
filename= str.subString(str.indexOf("/"),str.length());

没问题,但我怎么才能只获取文件名和扩展名呢? - rbrlnx

0

这是解决方案

fileUri = "file:///mnt/sdcard/20120904_162830.png";

URI fUri = new URI(fileUri);

File fichero = new File(fileUri.getPath());

这仅在fileUri中不提供任何网址的情况下有效


2
如果我从画廊意图得到文件,它不起作用,但是如果我拍照就可以。 - rbrlnx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接