2015-10-23 20 views
5
btnimport.setOnClickListener(new View.OnClickListener() { 

@Override 

public void onClick(View v) { 


Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT); 

fileintent.setType("*/*"); 

      try { 

       startActivityForResult(fileintent, requestcode); 

      } catch (ActivityNotFoundException e) { 

      } 
     } 
    });` 

Android uygulamasında sky.csv dosyasını içe aktarmaya çalışıyorum.Android için Dosyada Mutlak Yol Nasıl Gidilir?

Ama dosya seçtiğinizde, ben almak istiyorum:

IO İstisna: Ben yolunu kontrol edecek

ENOENT (Böyle bir dosya veya dizin): başarısız açmak

LOG> içeriği: //com.android.externalstorage.documents/document/38F0-D5E4%3ADCIM%2Fsky.csv i bu yöntemi kullanıyorum patikayı `almak için

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

if (data == null) 

return; 

switch (requestCode) { 

    case requestcode: 

Uri filepath1 = data.getData(); 

String filepath = filepath1.toString(); 
bana bu konuda yardımcı olun. Çok fazla yöntem denedim. Ancak uygun bir çözüm bulamadım.

+0

Olası kopyalar (http://stackoverflow.com/questions/17351043/how-to-get-absolute-path-to- [projenizde/kaynaklar klasörü içinde dosya mutlak yolunu nasıl alınır] dosya-in-kaynaklar-klasör-in-projeniz) – 0X0nosugar

cevap

26

Aşağıdaki kodları deneyebilirsiniz. Bu

PathUtils.getPath(context, filepath1); 

PathUtils.java sınıf altına eklenir cihazın sağlayıcılardan dosyaları getir.

import android.content.ContentUris; 
import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Environment; 
import android.provider.DocumentsContract; 
import android.provider.MediaStore; 

public class PathUtils { 

    public static String getPath(final Context context, final Uri uri) { 

     // DocumentProvider 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) { 

      if (isExternalStorageDocument(uri)) {// ExternalStorageProvider 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 
       String storageDefinition; 


       if("primary".equalsIgnoreCase(type)){ 

        return Environment.getExternalStorageDirectory() + "/" + split[1]; 

       } else { 

        if(Environment.isExternalStorageRemovable()){ 
         storageDefinition = "EXTERNAL_STORAGE"; 

        } else{ 
         storageDefinition = "SECONDARY_STORAGE"; 
        } 

        return System.getenv(storageDefinition) + "/" + split[1]; 
       } 

      } else if (isDownloadsDocument(uri)) {// DownloadsProvider 

       final String id = DocumentsContract.getDocumentId(uri); 
       final Uri contentUri = ContentUris.withAppendedId(
         Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); 

       return getDataColumn(context, contentUri, null, null); 

      } else if (isMediaDocument(uri)) {// MediaProvider 
       final String docId = DocumentsContract.getDocumentId(uri); 
       final String[] split = docId.split(":"); 
       final String type = split[0]; 

       Uri contentUri = null; 
       if ("image".equals(type)) { 
        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
       } else if ("video".equals(type)) { 
       contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
       } else if ("audio".equals(type)) { 
        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
       } 

       final String selection = "_id=?"; 
       final String[] selectionArgs = new String[]{ 
         split[1] 
       }; 

       return getDataColumn(context, contentUri, selection, selectionArgs); 
      } 

     } else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore (and general) 

      // Return the remote address 
      if (isGooglePhotosUri(uri)) 
       return uri.getLastPathSegment(); 

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

     } else if ("file".equalsIgnoreCase(uri.getScheme())) {// File 
      return uri.getPath(); 
     } 

     return null; 
    } 

    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()) { 
       final int column_index = cursor.getColumnIndexOrThrow(column); 
       return cursor.getString(column_index); 
      } 
     } finally { 
      if (cursor != null) 
       cursor.close(); 
     } 
     return null; 
    } 


    public static boolean isExternalStorageDocument(Uri uri) { 
     return "com.android.externalstorage.documents".equals(uri.getAuthority()); 
    } 


    public static boolean isDownloadsDocument(Uri uri) { 
     return "com.android.providers.downloads.documents".equals(uri.getAuthority()); 
    } 

    public static boolean isMediaDocument(Uri uri) { 
     return "com.android.providers.media.documents".equals(uri.getAuthority()); 
    } 

    public static boolean isGooglePhotosUri(Uri uri) { 
     return "com.google.android.apps.photos.content".equals(uri.getAuthority()); 
    } 
} 
ait
+1

Yardım için teşekkürler .. –

+0

Rica ederim! Sorunuzda size yardımcı olursa, bunu doğru cevap olarak kabul edin. =) Saygılarımızla! – DarwinLouis

+1

Teşekkür ederim nazikçe! – CantThinkOfAnything

İlgili konular