我試圖打開一個文件進行閱讀。Android打開文件
使用:Scanner input = new Scanner(filename);
文件找不到
,但是當我用:
InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);
它的工作。爲什麼第一行代碼錯了?
我試圖打開一個文件進行閱讀。Android打開文件
使用:Scanner input = new Scanner(filename);
文件找不到
,但是當我用:
InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);
它的工作。爲什麼第一行代碼錯了?
文件存儲在設備中的一個特定的,依賴於應用程序的位置,這是我認爲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
會導致掃描儀上的串,即其解釋爲實際內容的內容工作,而不是掃描爲一體的名稱一個文件打開。
這使我幾分鐘前瘋狂了。我忘了添加此行來體現:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我希望一個權限被拒絕消息。但是,僅僅有一個找不到文件 ...
你的情況:openFileInput
打開一個文件在您的私人數據的應用程序目錄(/data/data/your.package/filename
)。這永遠不會失敗。但掃描器試圖在根路徑上打開它。所以,當你想從SD卡讀取文件時,你會使用Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename
。
謝謝!我在開頭使用了錯誤的構造函數:P .. 然後我嘗試使用Scanner sc = new Scanner(new File(filename)); 但它沒有工作... File filesDir = getFilesDir(); 掃描儀輸入=新掃描儀(新文件(filesDir,文件名)); 這個很好用:D – zSt