java.io.FileNotFoundException:stack.txt:打开失败:EROFS(只读文件系统)



EDIT:在遵循这两个建议的同时,我确定以下建议适用于将字符串作为Byte数组写入文件。但现在我需要弄清楚如何将Byte数组读取回Strings。我需要帮助。。。是否有一个FileInputStream组件与此FileOutputStream反向等效?这适用于将字符串写入字节数组。

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)

我想我已经看到了关于这个话题的所有帖子,但没有任何帮助。我的两个代码片段是:

  1. 在onCreate((中
root = new File(getExternalFilesDir(null), "/HTMLSpyII/");
if (!root.exists()) {
if (!root.mkdirs()) {
runTimeAlert("File path does not exist orn" +
"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读取它们的并行代码。我错过了什么。这可能是创建文件之前的一些初步准备吗?

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

这是问题的完整解决方案的大纲。希望这能在某个时候帮助到某人。。。

  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());

最新更新