2013-07-27 19 views
1

已經提出了此問題,但尚未提出任何有效的解決方案。有人在這裏提出並回答了一個類似的問題:How to get list of files from a specific folder in internal storage?不幸的是,建議的答案(getAbsoluteDir)事實上會返回一個新的文件,它使用與提供的文件相同的路徑。獲取Android內部(私人)存儲任意子目錄中的文件列表

所以這裏又是:我有字符串名稱用於創建一個子目錄(使用file.mkdir())駐留在我的應用程序的私人內部存儲(/data/data/come.my.app/file)。如何使用該字符串名列出駐留在該子目錄中的文件?我可以想出的唯一方法是通過循環訪問該應用程序目錄中的所有子目錄,從子目錄名獲取子目錄的File對象。當然有更直接的方法...

我之所以這樣做是因爲我通過捆綁(跨活動)傳遞對此目錄的引用(因爲它包含的文件)。如果有更好的方式來做到這一點,我願意接受建議。

回答

3

不幸的是,建議的答案(getAbsoluteDir)實際上使用與提供的文件相同的路徑返回一個新文件。

那麼,你可以跳過lister行,並使用mydir.list()來代替。但是,那裏的代碼不會「返回」任何東西 - list()返回目錄中的文件,並在該答案中顯示對該列表的迭代。

如何使用該字符串名列出駐留在該子目錄中的文件?

您可以使用:

File dir=getDir(whateverYourStringNameIs); 

dir.list(); 

或者:

File dir=new File(getFilesDir(), whateverYourStringNameIs); 

dir.list(); 

基本上得到你的目錄File對象(你已經知道如何得到的,當你在一個叫mkdir() ),然後致電list()獲取內容。一旦你有了File對象,剩下的就是標準的Java I/O。

我之所以這樣做是因爲我通過捆綁包(跨活動)傳遞對此目錄的引用(因爲它包含的文件)。

假設這些都是自己所有的活動,你可以調用getAbsolutePath()File獲得StringBundle。然後,在另一側,使用new File(bundle.getString("whateverYouCalledIt"))重構File對象。或者,在Bundle中傳入一個字符串,該字符串表示應用程序內部存儲器部分中的相對路徑,並使用getDir()getFilesDir()來構建指向同一路徑的對象File

+0

非常感謝您的詳細解答。是的,我已經嘗試過getDir(它似乎需要第二個參數,讀/寫燙髮的int模式),並且我無法讓它工作 - 道歉沒有提到這一點。但後來我嘗試了第二個選項 - 構建一個傳入目錄名稱的新File對象 - 並且它工作正常!不知道爲什麼getDir無法正常工作。PS:如果這是普通書籍作者,那麼您的書就在我的Android書籍清單的頂部 - 我剛剛在Android上開始使用Java(以前在Android上使用過Lua和Python)。 –

+0

@ EricS.Bullington:「我無法讓它工作」 - 我幾乎堅持'getFilesDir()'或其他特定方法(例如'getDatabasePath()')。 「如果這是普通書籍作者」 - 那就是我。 「您的圖書是我要購買的Android圖書清單的頂部」 - 謝謝! :-) – CommonsWare

相關問題