我有这个方法,应该将arrayList
写入文件:
private ArrayList<String> readFromFile() {
String ret = "";
ArrayList<String> list = new ArrayList<String>();
try {
InputStream inputStream = openFileInput("jokesBody.bjk");
if (inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ((receiveString = bufferedReader.readLine()) != null) {
list.add(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
System.out.println("DA CRAZY FILE: " + ret);
}
} catch (FileNotFoundException e) {
Log.e("login activity", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("login activity", "Can not read file: " + e.toString());
}
return list;
}
它的问题在于,当我需要将值加载回[item1, item2, item3]
时,它会写入像listArray
这样的值,它会在索引0处加载整行。现在我找到了写入和读取arrayList
的核心方法,但我在访问teh文件时遇到了麻烦。
这是我尝试过的代码:
private void writeToFile(ArrayList<String> list) {
try {
FileOutputStream fos = new FileOutputStream("jokesBody.bjk");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list); // write MenuArray to ObjectOutputStream
oos.close();
} catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
}
但它引发了以下异常:
02-12 09:21:10.227: E/Exception(2445): File write failed: java.io.FileNotFoundException: /jokesBody.bjk: open failed: EROFS (Read-only file system)
错误在哪里,默认的app文件位置在哪里?我知道我错过了一些小东西,但作为一个Android初学者,我无法发现它。
答案 0 :(得分:3)
不是这个:
java.io.FileNotFoundException: /jokesBody.bjk: open failed: EROFS (Read-only file system)
问题是什么?你正在写一个不可写的区域。改变你写的地方(也许creating a temporary file would be a simple first step - 我不熟悉Android,但我认为这是可能的)
答案 1 :(得分:1)
您的文件似乎只读。你不能写一个只读文件!!!
答案 2 :(得分:1)
我认为您实际上并未将文件保存在您认为自己的位置。将文件写入外部存储时,请查看this tutorial。一些事情:
(1)您需要在清单中请求权限才能写入外部存储。如果不是,你最终会得到一个只读的情况。
(2)在写入代码之前,需要在代码中获取外部存储目录。这应该首先检查您的文件目录是否可写在第一位:
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
然后,您可以为要存储的文件创建特定目录,并将其存储在该位置,以便日后查找。例如:
public File getAlbumStorageDir(String albumName) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
然后,您可以将内容写入返回的文件
答案 3 :(得分:1)
在为Android开发时,必须从Context获取OutputStream:
fos = context.openFileOutput("jokesBody.bjk", Context.MODE_PRIVATE);
有关如何在Android上处理文件的说明,请访问:Saving Files