我正在尝试将文件写入手机(以及将来的用户手机)上的内部设备存储。我正在观看2016年的视频教程(https://www.youtube.com/watch?v=EhBBWVydcH8),该教程展示了他如何非常简单地将输出写入文件。如果你想看他的代码,请跳到8:23。
无论如何,我基本上尝试了他的代码,然后因为那不起作用,我想要搜索一下。
显然,要创建文件,我需要以下代码行:
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......
然后,如果我只是使用教程中的代码行运行我的代码,我会得到一个Null指针。
代码:
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中的第一行。
如果您需要任何其他信息来帮助我,请与我们联系。非常感谢您的回复。
答案 0 :(得分:2)
将目录和文件本身分开很重要。
在您的代码中,您在要写入的文件上调用mkdir
,这是错误的用法,因为mkdirs
会将您的文件放入目录中。您应该仅为目录调用mkdirs
,因此如果它不存在,它将被创建,并且当您为此文件创建新的FileOutputStream
对象时,将自动创建该文件。
试试这个:
File directory = getFilesDir(); //or getExternalFilesDir(null); for external storage
File file = new File(directory, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(IDNum.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}