Java 为什么我能';不读取只读文件?

Java 为什么我能';不读取只读文件?,java,android,android-activity,Java,Android,Android Activity,我有一个读取文件的方法: /* Read file's content */ private ArrayList<String> readFromFile() { File file = new File("jokesBody1.bjk"); ArrayList<String> list = new ArrayList<String>(); try { file.createNe

我有一个读取文件的方法:

 /* 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;
    }
甚至,如果文件是只读的,为什么我不能读取它?我真的不明白发生了什么事。我在我的舱单上有这样的预告:

有人能给我一个线索吗?我知道我错过了一些小东西,但我真的看不出来

以下是我如何编写文件:

/* 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(); 
        }
        }
    }
/*将内容写入文件*/
私有void writeToFile(ArrayList列表,上下文控制){
File File=新文件(“jokesBody1.bjk”);
文件输出流;
如果(列表!=null){
试试{
fos=cont.openFileOutput(“jokesBody1.bjk”,Context.MODE_PRIVATE);
ObjectOutputStream out=新的ObjectOutputStream(fos);
out.writeObject(列表);
out.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}否则{
试一试{
createNewFile();
fos=openFileOutput(“jokesBody1.bjk”,Context.MODE_PRIVATE);
ObjectOutputStream out=新的ObjectOutputStream(fos);
out.writeObject(“”);
out.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

您正在尝试创建该文件,但对于只读文件,该操作当然会失败

删除此行:

file.createNewFile();
这通常用于在写入之前创建新的空文件。如果您只想读取一个已经存在的文件,那么您真的不需要它

编辑:

只要用这个:

ObjectInputStream ois = new ObjectInputStream( context.openFileInput("jokesBody1.bjk"));
当然,还必须向函数传递上下文

您只能使用带有完整路径的
文件
。要访问私有文件,请使用上下文,就像保存文件一样

您的全部功能应如下所示:

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;
}
private ArrayList readFromFile(上下文){
ArrayList=新建ArrayList();
试一试{
ObjectInputStream ois=新的ObjectInputStream(context.openFileInput(“jokesBody1.bjk”);
试一试{
list=(ArrayList)ois.readObject();
}catch(classnotfounde异常){
e、 printStackTrace();
}
ois.close();
}捕获(IOE异常){
Log.e(“日志活动”,“无法读取文件:+e.toString());
}
退货清单;
}

您正在尝试创建该文件,但对于只读文件,该操作当然会失败

删除此行:

file.createNewFile();
这通常用于在写入之前创建新的空文件。如果您只想读取一个已经存在的文件,那么您真的不需要它

编辑:

只要用这个:

ObjectInputStream ois = new ObjectInputStream( context.openFileInput("jokesBody1.bjk"));
当然,还必须向函数传递上下文

您只能使用带有完整路径的
文件
。要访问私有文件,请使用上下文,就像保存文件一样

您的全部功能应如下所示:

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;
}
private ArrayList readFromFile(上下文){
ArrayList=新建ArrayList();
试一试{
ObjectInputStream ois=新的ObjectInputStream(context.openFileInput(“jokesBody1.bjk”);
试一试{
list=(ArrayList)ois.readObject();
}catch(classnotfounde异常){
e、 printStackTrace();
}
ois.close();
}捕获(IOE异常){
Log.e(“日志活动”,“无法读取文件:+e.toString());
}
退货清单;
}

您没有指定任何路径:

File file = new File("jokesBody1.bjk");
所以,你不是说应用程序在哪里查找文件

也许,你想在这里搜索

Environment.getExternalStorageDirectory()

您没有指定任何路径:

File file = new File("jokesBody1.bjk");
所以,你不是说应用程序在哪里查找文件

也许,你想在这里搜索

Environment.getExternalStorageDirectory()

你的档案在哪里?File File=新文件(“jokesBody1.bjk”);我看不到任何路径。写入文件时,您的
文件
变量完全无用。您的文件在哪里可能重复?File File=新文件(“jokesBody1.bjk”);我看不到任何路径。写入文件时,您的
文件
变量完全无用。可能重复
02-16 06:22:22.486:E/log活动(1450):无法读取文件:java.io.FileNotFoundException:/jokesBody1.bjk:open失败:enoint(没有这样的文件或目录)
这是我得到的:(您的文件位于哪里?
02-16 06:22:22.486:E/log活动(1450):无法读取文件:java.io.FileNotFoundException:/jokesBody1.bjk:open失败:enoint(没有这样的文件或目录)
这是我得到的信息:(您的文件位于哪里?