2017-10-05 117 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()將返回用戶應該識別的「顯示名稱」(但可能不是傳統的文件名)。

相關問題