2017-10-05 133 views
0

我有一个问题,获取文件,我从文件选择器从谷歌驱动器中提取,但是当我选择它,它带给我的URI我可以得到的名称,但是当我创建一个文件是空的。文件选取器获取文件在谷歌驱动器

  1. getDataColumn:

    公共静态字符串getDataColumn(上下文语境,乌里URI,串选择, 字符串[] selectionArgs两个){

    Cursor cursor = null; 
    final String column = "_data"; 
    final String[] projection = { 
         column 
    }; 
    
    try { 
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, 
          null); 
        if (cursor != null && cursor.moveToFirst()) { 
          DatabaseUtils.dumpCursor(cursor); 
    
         final int column_index = cursor.getColumnIndexOrThrow(column); 
         return cursor.getString(column_index); 
        } 
    } finally { 
        if (cursor != null) 
         cursor.close(); 
    } 
    return null; 
    

    }

2 。获得路径代码:

else if ("content".equalsIgnoreCase(uri.getScheme())) { 
     if (isGooglePhotosUri(uri) || isGoogleDriveUri(uri)) 
      return uri.getLastPathSegment(); 

     return getDataColumn(context, uri, null, null); } 

3.检查文件大小:

(new File(PathUtil.getPath(getActivity(), uri)).length() == 0){ 
    //alert 
} 
+1

请提供一个[mcve]并详细解释“我可以得到的名称,但是当我创建一个文件是空的”的意思。 – CommonsWare

+0

谢谢,问题已编辑。 –

回答

0

请参阅本文档: https://developer.android.com/guide/topics/providers/document-provider.html

特别是这部分:

private String readTextFromUri(Uri uri) throws IOException { 
InputStream inputStream = getContentResolver().openInputStream(uri); 
BufferedReader reader = new BufferedReader(new InputStreamReader(
     inputStream)); 
StringBuilder stringBuilder = new StringBuilder(); 
String line; 
while ((line = reader.readLine()) != null) { 
    stringBuilder.append(line); 
} 
fileInputStream.close(); 
parcelFileDescriptor.close(); 
return stringBuilder.toString(); 
} 

希望它可以帮助

0

有没什么 纠正你的问题中的任何代码。例如,不一定要有_data列可用于查询任何Uri

A Uri不是文件。你无法获得一个文件系统路径。

您不显示您正在使用的“文件选择器”。如果是ACTION_GET_CONTENTACTION_OPEN_DOCUMENT,请理解这两者都不是“文件选择器”。您从中获得的Uri可与DocumentFile.fromSingleUri()一起使用。 DocumentFile对象有getName()length()方法,您可以使用。 length()将以字节为单位返回内容的大小。 getName()将返回用户应该识别的“显示名称”(但可能不是传统的文件名)。

相关问题