2016-08-18 75 views
0

读我想读从URI一个FileInputStream,但它返回找不到文件的异常未找到文件当试图从URI在android系统

这是我到目前为止的代码例外:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("*/*"); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    try { 
     startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); 
    } catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(getContext(), "Please install a File Manager.", Toast.LENGTH_SHORT).show(); 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case FILE_SELECT_CODE: 
      if (resultCode == RESULT_OK) { 
       // Get the Uri of the selected file 
       Uri fileUri = data.getData(); 
       long size = Helper.GetFileSize(getActivity(),fileUri); 
       File F = new File(fileUri.getPath()); 
       Log.d("File", "File Uri: " + fileUri.toString()); 
       FileInputStream fis; 
       try { 
        fis = new FileInputStream(new File(F.getPath())); 
       } 
       catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
      break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 
+0

你试图从库加载它? – sumandas

+0

是的,我正试图从画廊加载它 – Sora

+0

我已更新我的问题 – Sora

回答

1

问题是路径中包含的内容:// ......而文件需要有一个实际的文件路径

尝试更新您的代码段,该位:

Uri fileUri = data.getData(); 
String filePath = getPathFromUri(this,fileUri); 
long size = Helper.GetFileSize(getActivity(),filePath); 
File F = new File(filePath); 

,这是方法来帮助

public String getPathFromURI(Context context, Uri contentUri) { 
    Cursor mediaCursor = null; 
    try { 
      String[] dataPath = { MediaStore.Images.Media.DATA }; 
      mediaCursor = context.getContentResolver().query(contentUri, dataPath, null, null, null); 
      int column_index = mediaCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      mediaCursor.moveToFirst(); 
      return mediaCursor.getString(column_index); 
    } finally { 
     if (mediaCursor != null) { 
      mediaCursor.close(); 
     } 
    } 
} 
+0

GetPathFromUri总是返回null,我也许从'dataPath'想我不知道为什么。请帮助 – Sora

+0

啊,你可以请粘贴分配给contentUri价值? – sumandas

+1

我昨天解决了这个问题,我发现一个类处理所有类型的uri的'https:// github.com/iPaulPro/aFileChooser' – Sora