2016-06-22 16 views
3

Imaging, wollen Sie, wenn „/folder/subfolder/subsubfolder/test/test.txt“ Datei Ausfahrten überprüfen, würden Sie folgende:SAF Documentfile - überprüfen Sie, ob Pfad vorhanden ist, ohne bei jeder Ordnerebene jedes Documentfile Erstellen

DocumentFile sdCard = ...; // i have already retrieved the sd card root with the users help via SAF 

String path = "<SD CARD>/folder/subfolder/subsubfolder/test/test.txt"; 
List<String> pathParts = Arrays.asList(path.split("/")); 
DocumentFile doc = sdCard; 
// go through all folders, starting at sd card, to check, if the desired file exists 
for (int i = 1; i < pathParts.size(); i++) 
{ 
    DocumentFile nextDoc = doc.findFile(pathParts.get(i)); 
    if (nextDoc != null) 
     doc = nextDoc; 
    else 
    { 
     doc = null; 
     break; 
    } 
} 

if (doc == null) 
{ 
    // file does not exist 
} 
else 
{ 
    // file does exist 
} 

Dies ist sehr langsam, gibt es eine schnellere Möglichkeit, zumindest zu überprüfen, ob eine Datei auf der SD-Karte vorhanden ist? Ich mag nicht jeden DocumentFile nur für die Überprüfung erstellen, wenn ein Pfad existiert ...

+0

wenn Sie eine Lösung haben? – Haryanto

+0

nicht besser als die in meiner Frage geschrieben ... – prom85

Antwort

2
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Uri uri = data.getData(); 
    DocumentFile pickedDir = DocumentFile.fromTreeUri(MainActivity.this, uri); 
    String id = DocumentsContract.getTreeDocumentId(uri); 

    /* id is : "primary:namefolder" if user select a "namefolder" from internal storage. 
    or CABB-5641 if user select external storage, 
    */ 

    id = id + "/folder/subfolder/subsubfolder/test/test.txt"; // your path, you must to ensure is consistent with that chosen by the user, 

    Uri childrenUri = DocumentsContract.buildDocumentUriUsingTree(uri,id); 
    DocumentFile chhildfile = DocumentFile.fromSingleUri(MainActivity.this,childrenUri); 

    if(chhildfile != null && chhildfile.exists()){ 
     Log.d("laporan file", "file ini ada"); 
    } 
} 

Ich bin kein Experte, und ich weiß nicht, ob dies auf den meisten Android funktionieren wird, aber ich habe versucht, im Android Emulator und Asus Zenfone 5, wird dies hoffentlich helfen

+0

große Lösung Mann – meysam