我正在嘗試將文件寫入手機(以及未來用戶手機上)的內部設備存儲器中。我正在觀看2016年的視頻教程(https://www.youtube.com/watch?v=EhBBWVydcH8),它顯示了他如何將輸出寫入文件非常簡單。如果你想看他的代碼,請跳到8:23。Android Studio - 只讀文件系統?
無論如何,我基本上試過他的代碼,然後既然沒有工作,我想四處搜尋。
顯然,創建一個文件,我需要幾行代碼:
String filename = "textfile.txt";
File file = new File(filename);
file.mkdirs();
file.createNewFile();
在第二行,file.createNewFile(),我得到下面的錯誤:
java.io.IOException: Read-only file system
at java.io.UnixFileSystem.createFileExclusivel
at java.io.UnixFileSystem.createFileExclusivel
at java.io.File.createNewFile(File.java:948)
etc......
而且那麼,如果我只是使用教程中的代碼行來運行我的代碼,那麼我會得到一個空指針。
代碼:
try {
FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(IDNum.getBytes());
fos.close();
System.out.println("Wrote STuff Outputtt?");
} catch (Exception e) {
e.printStackTrace();
}
錯誤:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference
at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:199)
at com.lecconnect.lockoutdemo.FileManager.AddUser(FileManager.java:37)
37號線是在try/catch語句的第一行。
如果您需要任何其他信息來幫助我,請讓我知道。非常感謝您的答覆。
你'FileManager'類顯然延伸的類,你不應該用'new'被實例化;像「活動」或「服務」。我假設你這樣做,以便'openFileOutput()'可以解決。你不能那樣做,因爲最終調用的'Context'將會是null,就像你在trace中看到的一樣。如果你想把這個方法保存在一個單獨的類中,可以在'AddUser()'中添加一個'Context'參數,並從'Activity','Service'等等中傳入一個參數。我還應該提到'openFileOutput() '在應用的私人內部存儲器中打開文件,這可能不是您所期望的。 –
@MikeM。我通過解析「openFileOutput()」去除了「... extends Activity」,正如你所假設的那樣。我現在通過我的其他活動傳遞情景。導致錯誤的行被重寫爲「FileOutputStream fos = context.openFileOutput(filename,Context.MODE_PRIVATE);」看起來我的代碼不會崩潰,但我無法在任何地方找到我的文本文件lol。我去了Internal_Storage/Android/Data/com.outputproject/demo,該文件應該在那裏,而且不在那裏。這是你內部私人部門的意思,對嗎?或者是不能被看到的私人文件?這個位置沒問題。 – FoxDonut
使用追加模式不會改變 - 它看起來像一切運行良好,但無法找到.txt文檔的位置。或者,也許我濫用上下文? – FoxDonut