【问题标题】:java.io.FileNotFoundException: stack.txt: open failed: EROFS (Read-only file system)java.io.FileNotFoundException:stack.txt:打开失败:EROFS(只读文件系统)
【发布时间】:2021-05-16 16:33:16
【问题描述】:

编辑:在跟进这两个建议时,我确定以下内容可以将字符串作为字节数组写入文件。但现在我需要弄清楚如何将字节数组读回字符串。我可以使用帮助,请... 是否存在与此 FileOutputStream 反向等效的 FileInputStream 组件?这适用于将字符串写入为字节数组。

try {
    FileOutputStream fos = openFileOutput("stack.txt", Context.MODE_PRIVATE);
    for (String item : stack)
       fos.write(stack.pop().getBytes());
    fos.close();
    sb.append("The Stack is saved.\n");
    } catch (IOException e) {
         sb.append(e.toString());
    }
displayText(sb.toString());

我正在尝试将字符串从 ArrayDeque 写入文件。我将 ArrayDeque 用作堆栈。字符串的长度不同。打开文件进行输出时出现此错误...

java.io.FileNotFoundException: stack.txt: open failed: EROFS (Read-only file system)

我想我已经看过所有关于这个主题的帖子,但没有任何帮助。 我的两个代码 sn-ps 是:

  1. 在 onCreate()...
root = new File(getExternalFilesDir(null), "/HTMLSpyII/");
if (!root.exists()) {
    if (!root.mkdirs()) {
        runTimeAlert("File path does not exist or\n" +
            "Unable to create path \n" + root.toString());
            }
        }
  1. 在程序中...
try {
    DataOutputStream dos = new DataOutputStream(
        new FileOutputStream("stack.txt")); // program fails here
    for (String item : stack)
        dos.writeUTF(stack.pop());
        dos.close();
        sb.append("The Stack is saved.\n");
    } catch (IOException e) {
        sb.append(e.toString());
    }
    displayText(sb.toString());

我有使用 DataInputStream 和 FileInputStream 读取它们的并行代码。我错过了一些东西。是否在创建文件之前进行了一些初步准备?

做一些研究后,我感觉问题可能是我还不熟悉使用新的特定于应用程序的持久性内部/外部存储的要求?但我不知道,所以我正在寻找一些指导,请:)

【问题讨论】:

  • new FileOutputStream("stack.txt")); 替换为File file = new File(root, "stack.txt"); new FileOutputStream(file);
  • @Joachim Sauer 我在那里没有找到答案。有趣的东西,但不是一种文件技术,我可能会用它来打开写和读回一系列字符串:( blackapps 我无法弄清楚如何进行你建议的替换工作:( 我需要使用 readUTF 和 writeUTF 哪个需要 ObjectInputStream 和 ObjectOutputStream。我用我的新方法编辑了帖子。似乎 writeUTF/readUTF 是唯一将字符串写入文件然后读回它们的对。它们是 java.io.ObjectOutputStream 的一部分。我需要找到一种在不崩溃的情况下打开/关闭文件的方法。

标签: java android filenotfoundexception fileoutputstream dataoutputstream


【解决方案1】:

这是该问题的完整解决方案的大纲。希望这对某人有所帮助...

  1. 问题是: 使用 ArrayDeque 作为堆栈来保存字符串,并使用文件来保存和恢复堆栈。

  2. 解决方案的关键部分是: 使用 ObjectOutputStream 和 ObjectInputStream 将堆栈保存和恢复到外部存储。 使用 getExternalFilesDir() 打开文件进行保存和恢复。

  3. 打开文件以保存当前堆栈内容...

File stackRoot = new File(getExternalFilesDir(null), "/AppName/stack.dat");
    FileOutputStream fos = new FileOutputStream(stackRoot);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
  1. 要将堆栈清空到文件中...
for (String item : stack) oos.writeObject(item);
oos.close();
  1. 打开文件以恢复保存的堆栈内容...
File stackRoot = new File(getExternalFilesDir(null), "/AppName/stack.dat");
    FileInputStream fis = new FileInputStream(stackRoot);
    ObjectInputStream ois = new ObjectInputStream(fis);
  1. 要将文件清空到堆栈中...
while (true) stack.addLast((String) ois.readObject());

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 2015-01-22
    • 2014-04-19
    • 2019-09-30
    • 2012-12-08
    • 1970-01-01
    • 2016-01-23
    • 2015-06-08
    • 2015-01-02
    相关资源
    最近更新 更多