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

问题描述:

即使在阅读了每个堆栈溢出问题后,我仍然不断收到所述错误,我可以找到并尝试几种不同的方法创建文件。我现在有用于读取和写入一组对象的内部存储以下两种方法:Android文件系统:java.io.FileNotFoundException:/ savedArticlesFile:打开失败:EROFS(只读文件系统)

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

每当我打了一个try块,即试图打开输入或输出流,我得到的右偏误。我的印象是,我提供的路径应该同时启用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 
+0

*别的地方*您可能会尝试使用它自己的文件名不带路径字首。请将错误的实际堆栈跟踪编辑到您的问题中,然后包含引用的代码(如果它不是您已发布的代码)。还要清理并重建和部署项目,以确保您运行的版本与最新的源代码相匹配。 – 2014-11-05 20:04:27

+0

尝试使用getActivity()。getFilesDir()。getAbsolutePath()+“/”+您的文件名。我认为名称为'文件'的目录尚不存在。使用file.exists()根据需要用mkdirs()检查和创建。 – greenapps 2014-11-05 20:30:53

+0

@ChrisStratton请看我编辑的问题,我已经粘贴了堆栈跟踪 – swilkeni 2014-11-05 20:44:53

尝试基于它看起来像错误信息使用directory.mkdirs()代替directory.mkdir()