Android文件系统:java.io.FileNotFoundException:/savedArticlesFile:open失败:EROFS(只读文件系统)

Android文件系统:java.io.FileNotFoundException:/savedArticlesFile:open失败:EROFS(只读文件系统),java,android,io,filenotfoundexception,Java,Android,Io,Filenotfoundexception,即使在阅读了上面的每个堆栈溢出问题之后,我仍然不断地听到这个错误,我可以找到并尝试几种不同的创建文件的方法。我目前有以下两种方法可以将一组对象读写到内部存储器: public HashSet<PrestoItem> readSavedArticleFile() { Log.d("snw", "readSavedArticlesFile()"); String filename = "savedArticlesFile"; String filePath = g

即使在阅读了上面的每个堆栈溢出问题之后,我仍然不断地听到这个错误,我可以找到并尝试几种不同的创建文件的方法。我目前有以下两种方法可以将一组对象读写到内部存储器:

public HashSet<PrestoItem> readSavedArticleFile() {
    Log.d("snw", "readSavedArticlesFile()");
    String filename = "savedArticlesFile";
    String filePath = getActivity().getFilesDir().getPath().toString() + "/" + filename;
    File savedArticlesFile = new File(filePath);
    ObjectInputStream input;
    HashSet<PrestoItem> articleSet = null;

    // retrieve article set
    try {
        input = new ObjectInputStream(new FileInputStream(savedArticlesFile));
        articleSet = (HashSet<PrestoItem>) input.readObject();
        input.close();
    } catch (StreamCorruptedException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    if (articleSet == null) {
        articleSet = new HashSet<PrestoItem>();
    }

    return articleSet;
}

public void saveArticleSet(HashSet<PrestoItem> articleSet) {
    // write set back to file
    String filename = "savedArticlesFile";
    String filePath = getActivity().getFilesDir().getPath().toString() + "/" + filename;
    ObjectOutput output;
    try {
        output = new ObjectOutputStream(new FileOutputStream(filePath));
        output.writeObject(articleSet);
        output.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
public HashSet readSavedArticleFile(){
Log.d(“snw”、“readSavedArticlesFile()”);
字符串filename=“savedArticlesFile”;
字符串filePath=getActivity().GetFileDir().getPath().toString()+“/”+文件名;
File savedArticlesFile=新文件(filePath);
目标输入流输入;
HashSet-articleSet=null;
//检索项目集
试一试{
输入=新对象输入流(新文件输入流(savedArticlesFile));
articleSet=(HashSet)input.readObject();
input.close();
}捕获(StreamCorruptedException e){
e、 printStackTrace();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}catch(classnotfounde异常){
e、 printStackTrace();
}
if(articleSet==null){
articleSet=新的HashSet();
}
返回项目集;
}
public void saveArticleSet(HashSet articleSet){
//将设置写回文件
字符串filename=“savedArticlesFile”;
字符串filePath=getActivity().GetFileDir().getPath().toString()+“/”+文件名;
对象输出;
试一试{
output=newobjectoutputstream(newfileoutputstream(filePath));
output.writeObject(articleSet);
output.close();
}
catch(filenotfounde异常){
e、 printStackTrace();
}
捕获(IOE异常){
e、 printStackTrace();
}
}
每当我点击一个try块,即试图打开一个输入或输出流,我就会得到ROFS错误。我的印象是,我提供的路径应该同时启用r/w权限,但即使在读取时也会抛出错误。我显然在某个地方误解了什么。任何指导都将不胜感激

编辑:堆栈跟踪

11-05 15:40:09.659  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ java.io.FileNotFoundException: /data/data/com.gannett.dolly.CooksCorner/files/savedArticlesFile: open failed: ENOENT (No such file or directory)
11-05 15:40:09.659  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
11-05 15:40:09.659  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:78)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.gannett.dolly_android.WebAppLoaderFragment.readSavedArticleFile(WebAppLoaderFragment.java:378)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.gannett.dolly_android.WebAppLoaderFragment$2.shouldOverrideUrlLoading(WebAppLoaderFragment.java:225)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:293)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:96)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at android.os.Looper.loop(Looper.java:146)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5487)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at libcore.io.Posix.open(Native Method)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:393)
11-05 15:40:09.669  26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ ... 15 more
11-05 15:40:09.659 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ java.io.FileNotFoundException:/data/data/com.gannett.dolly.CooksCorner/files/savedArticlesFile:open失败:enoint(没有这样的文件或目录)
11-05 15:40:09.659 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:409)
11-05 15:40:09.659 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于java.io.FileInputStream。(FileInputStream.java:78)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于com.gannett.dolly_android.WebAppLoaderFragment.readSavedArticleFile(WebAppLoaderFragment.java:378)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在com.gannett.dolly_android.WebAppLoaderFragment$2.shouldOverrideUrlLoading(WebAppLoaderFragment.java:225)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:293)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在com.android.org.chromiu.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading上(AwContentsClientBridge.java:96)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于com.android.org.chromium.base.SystemMessageHandler.NativeDorUnloponce(本机方法)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:102)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于android.os.Looper.loop(Looper.java:146)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5487)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:515)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)上
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在dalvik.system.NativeStart.main(本机方法)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 原因:libcore.io.ErrnoException:open失败:enoint(没有这样的文件或目录)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在libcore.io.Posix.open中(本机方法)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在libcore.io.BlockGuardOs.open上(BlockGuardOs.java:110)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:393)
11-05 15:40:09.669 26726-26726/com.gannett.dolly.CooksCorner W/System.err﹕ ... 还有15个

尝试使用
directory.mkdirs()
而不是
directory.mkdir()

根据错误消息,您可能会尝试在其他地方单独使用文件名,而不使用路径前缀。请将错误的实际堆栈跟踪编辑到您的问题中,如果引用的代码不是您已经发布的代码,请将其包括在内。还要清理、重建和部署项目,以确保运行的版本与最新的源代码相匹配