fileInputStream(file)给出打开失败:ENOENT(没有这样的文件或目录)错误

时间:2016-02-01 09:14:22

标签: java android video uri fileinputstream

我正在尝试在服务器上传视频。这就是我获取视频的方式

intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
  intent.addCategory(Intent.CATEGORY_OPENABLE);
  intent.setType("video/*");
  startActivityForResult(intent, SELECT_VIDEO);

我以这种方式获取文件

Uri uri = data.getData();

这是我收到的

  

内容://com.android.providers.media.documents/document/video%3A165191

我以这种方式展示视频预览

mVideoView.setVideoURI(uri);
 mVideoView.requestFocus();
 mVideoView.start();

预览播放完美。然后我需要制作一个文件将其上传到服务器。我以这种方式制作这个文件

file = new File(uri.getPath());

但是当我到达下面一行时,它会出错

 FileInputStream fileInputStream = new FileInputStream(file);

我也试过uri.toString();但仍然是错误。我收到的错误如下:

  

2错误:/ document / video:165191:open failed:ENOENT(没有这样的文件或   目录)                                                          java.io.FileNotFoundException:/ document / video:165191:open failed:   ENOENT(没有这样的文件或目录)

请有人帮助我...这真让我感到沮丧..

1 个答案:

答案 0 :(得分:0)

您获得的数据URI不需要是文件系统上的路径 - 某些应用程序将其实现为路径,其他应用程序将其作为唯一URI通过ContentResolver公开其数据。

你最好的选择是调用openInputStream(uri),它会返回一个InputStream。根据您对服务器上载的实现,您可以使用它直接将字节流式传输到服务器,或将字节传递给FileOutputStream,将数据保存到文件中并将其用于上传。