2011-10-12 133 views
13

我試圖打開一個文件進行閱讀。Android打開文件

使用:Scanner input = new Scanner(filename);文件找不到

,但是當我用:

InputStream in = openFileInput(filename); 
Scanner input = new Scanner(in); 

它的工作。爲什麼第一行代碼錯了?

回答

10

文件存儲在設備中的一個特定的,依賴於應用程序的位置,這是我認爲openFileInput在文件名的開頭添加的位置。最終的結果(位置+文件名)的結構如下:

/data/data/<application-package>/files/<file-name> 

還要注意的是,文檔指出openFileInput參數cannot contain path separators

爲避免對位置路徑進行硬編碼,原則上甚至可能因設備不同而不同,您可以通過調用getFilesDir來獲得指向存儲目錄的File對象,並使用它來讀取任何您想要的文件至。例如:

File filesDir = getFilesDir(); 
Scanner input = new Scanner(new File(filesDir, filename)); 

注意,通過傳遞String作爲參數構建Scanner會導致掃描儀上的串,即其解釋爲實際內容的內容工作,而不是掃描爲一體的名稱一個文件打開。

+0

謝謝!我在開頭使用了錯誤的構造函數:P .. 然後我嘗試使用Scanner sc = new Scanner(new File(filename)); 但它沒有工作... File filesDir = getFilesDir(); 掃描儀輸入=新掃描儀(新文件(filesDir,文件名)); 這個很好用:D – zSt

-4
Scanner sc = new Scanner(new File(filename)); 
+10

你能否提供更多信息?投擲代碼無助於任何人... – WarrenFaith

9

這使我幾分鐘前瘋狂了。我忘了添加此行來體現:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我希望一個權限被拒絕消息。但是,僅僅有一個找不到文件 ...

你的情況:openFileInput打開一個文件在您的私人數據的應用程序目錄(/data/data/your.package/filename)。這永遠不會失敗。但掃描器試圖在根路徑上打開它。所以,當你想從SD卡讀取文件時,你會使用Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename