Android Studio - 只读文件系统?

时间:2017-06-03 03:32:34

标签: java android android-studio file-io

我正在尝试将文件写入手机(以及将来的用户手机)上的内部设备存储。我正在观看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中的第一行。

如果您需要任何其他信息来帮助我,请与我们联系。非常感谢您的回复。

1 个答案:

答案 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();
}