Java 发生从Uri创建文件异常

Java 发生从Uri创建文件异常,java,android,Java,Android,从Uri创建文件时发生异常。exception的值显示为null try { File mFile = new File(new URI(mediaUri.toString())); data = readFile(mFile); } catch (Exception e) { Log.e("Error", e.getLocalizedMessage()); } 请帮忙 提前感谢。您应该检查mediaURI是否已更正文件路径,我想这不是已更正的文件路径 你能再解释一下吗?有几

从Uri创建文件时发生异常。exception的值显示为null

try {
File mFile = new File(new URI(mediaUri.toString()));
data = readFile(mFile);     
 } catch (Exception e) {
Log.e("Error", e.getLocalizedMessage());
}   
请帮忙


提前感谢。

您应该检查mediaURI是否已更正文件路径,我想这不是已更正的文件路径


你能再解释一下吗?

有几件事可能是错的

首先,mediaUri可以为null

第二,readFile是您自己的方法吗(我想是的),那么您应该发布该方法,或者在readFile中进行尝试/捕获。

原因是这样的。如果按照您的代码,您正在创建一个不应包含任何数据的新文件,那么您使用readFile的目的是什么?如果文件存在,并且mediaUri不为null,则null异常来自readFile方法。

问题在于从uri创建文件时

File mFile=新文件(新URI(mediaUri.toString())

mediaUri.toString()未从返回视频文件的正确路径以获取视频文件的正确路径

File mFile = new File(new URI(getRealPathFromURI(contentUri));


     public String getRealPathFromURI(Uri contentUri) {

    String[] proj = { MediaStore.Video.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

当从给定Uri获取视频文件路径时,这个答案是userfull。问题是,Uri.toString()生成设备字符串(文件:)和路径本身。您应该改用uri.getPath()。它返回的不是路径,而是字符串。开始时可能有额外的/或\项。你应该发布它,这样它就可以在所有系统上工作。正确且独立于操作系统的线路为:

File mFile = new File(new Path(mediaUri.getPath()).toString);

在win、mac和linux上执行我们的项目

@QBLive,你应该添加一条评论来提问或对答案发表评论,而不是编辑答案-这会让人困惑。文件路径示例:file:///tmp/android.txt ,并且不需要uri来字符串。文件具有uri参数的构造函数。参考