我有这个方法应该读取文件:
/* Read file's content */
private ArrayList<String> readFromFile() {
File file = new File("jokesBody1.bjk");
ArrayList<String> list = new ArrayList<String>();
try {
file.createNewFile();
ObjectInputStream ois = new ObjectInputStream( new FileInputStream( file ) );
try {
list = (ArrayList)ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ois.close();
} catch (IOException e) {
Log.e("log activity", "Can not read file: " + e.toString());
}
return list;
}
当我打电话时,它会返回:
02-16 06:15:32.686: E/log activity(1380): Can not read file: java.io.IOException: open failed: EROFS (Read-only file system)
即使,如果文件是只读的,为什么我看不懂呢?我真的无法理解什么是wroong。我在我的清单中有这个暂停:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
有人能给我一些线索吗?我知道我错过了一些小事,但我真的无法发现它。
以下是我编写文件的方式:
/* Write content to a file */
private void writeToFile(ArrayList<String> list, Context cont) {
File file = new File("jokesBody1.bjk");
FileOutputStream fos;
if(list != null){
try {
fos = cont.openFileOutput("jokesBody1.bjk", Context.MODE_PRIVATE);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(list);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
try {
file.createNewFile();
fos = openFileOutput("jokesBody1.bjk",Context.MODE_PRIVATE);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject("");
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
您正在尝试创建该文件,该文件当然在只读文件上失败。
删除此行:
file.createNewFile();
这通常用于在写入之前创建新的空文件。如果你只是想读取已经存在的文件,你真的不需要它。
修改强>
请使用:
ObjectInputStream ois = new ObjectInputStream( context.openFileInput("jokesBody1.bjk"));
当然,您还必须将Context传递给函数。
您只能使用File
完整路径。要访问私有文件,请使用Context,就像保存文件一样。
您的全部功能应如下所示:
private ArrayList<String> readFromFile(Context context) {
ArrayList<String> list = new ArrayList<String>();
try {
ObjectInputStream ois = new ObjectInputStream( context.openFileInput("jokesBody1.bjk"));
try {
list = (ArrayList)ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ois.close();
} catch (IOException e) {
Log.e("log activity", "Can not read file: " + e.toString());
}
return list;
}
答案 1 :(得分:1)
您没有指定任何路径:
File file = new File("jokesBody1.bjk");
所以,你并不是说应用程序在哪里查找文件。
也许,你想在这里搜索一下吗?
Environment.getExternalStorageDirectory()