文件选择器用于在谷歌驱动器上获取文档

时间:2017-10-05 15:07:42

标签: java android

我在使用文件选择器从Google驱动器中提取文档时遇到问题,但是当我选择它并且它为我提供了URI时,我可以获取该名称,但是当我创建文件时它是空的。

  1. getDataColumn:

    public static String getDataColumn(Context context,Uri uri,String selection,                                    String [] 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. 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
     }
    

2 个答案:

答案 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();
}

希望有所帮助

答案 1 :(得分:0)

您的问题中的任何代码都没有任何正确之处。例如,没有_data列可用于查询任意Uri

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

您没有显示您正在使用的“文件选择器”。如果是ACTION_GET_CONTENTACTION_OPEN_DOCUMENT,请理解它们都不是“文件选择器”。您从这些Uri获得的DocumentFile.fromSingleUri()可以与DocumentFile一起使用。 getName()对象具有您可以使用的length()length()方法。 getName()将以字节为单位返回内容的大小。 a <- "75" b <- "175" a > b TRUE (75 > 175) a < b FALSE (75 < 175) 将返回用户应识别的“显示名称”(但可能不是传统文件名)。