文件选取器获取文件在谷歌驱动器
问题描述:
我有一个问题,获取文件,我从文件选择器从谷歌驱动器中提取,但是当我选择它,它带给我的URI我可以得到的名称,但是当我创建一个文件是空的。文件选取器获取文件在谷歌驱动器
-
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
}
答
请参阅本文档: 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();
}
希望它可以帮助
答
有没什么 纠正你的问题中的任何代码。例如,不一定要有_data
列可用于查询任何Uri
。
A Uri
不是文件。你无法获得一个文件系统路径。
您不显示您正在使用的“文件选择器”。如果是ACTION_GET_CONTENT
或ACTION_OPEN_DOCUMENT
,请理解这两者都不是“文件选择器”。您从中获得的Uri
可与DocumentFile.fromSingleUri()
一起使用。 DocumentFile
对象有getName()
和length()
方法,您可以使用。 length()
将以字节为单位返回内容的大小。 getName()
将返回用户应该识别的“显示名称”(但可能不是传统的文件名)。
请提供一个[mcve]并详细解释“我可以得到的名称,但是当我创建一个文件是空的”的意思。 – CommonsWare
谢谢,问题已编辑。 –