我在使用文件选择器从Google驱动器中提取文档时遇到问题,但是当我选择它并且它为我提供了URI时,我可以获取该名称,但是当我创建文件时它是空的。
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.获取路径的代码:
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
}
答案 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_CONTENT
或ACTION_OPEN_DOCUMENT
,请理解它们都不是“文件选择器”。您从这些Uri
获得的DocumentFile.fromSingleUri()
可以与DocumentFile
一起使用。 getName()
对象具有您可以使用的length()
和length()
方法。 getName()
将以字节为单位返回内容的大小。 a <- "75"
b <- "175"
a > b
TRUE (75 > 175)
a < b
FALSE (75 < 175)
将返回用户应识别的“显示名称”(但可能不是传统文件名)。