Android Error - Open Failed ENOENT
Asked Answered
C

2

52

I am trying to save some block coverage using an array of integers that simply saves the number of times a block is executed. For some reason, though, when I try and write to some files that I created ("BlockForHelper.txt" for example, which I made specifically in Eclipse and placed in the project directory), I get this error:

java.io.FileNotFoundException:  /nfs/guille/groce/users/nicholsk/workspace3/SQLTest/BlockForTest: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:416)
at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
at com.example.sql2.SQLTest.blockCoverage(SQLTest.java:149)
at com.example.sql2.test.SQLTestCase.testSuite(SQLTestCase.java:41)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at libcore.io.IoBridge.open(IoBridge.java:400)
... 18 more

and gives me the error:

public void blockCoverage() throws IOException
{
    String coverage = "";
    for (int x = 0; x < 20; x++)
        coverage += x + " " + bb_count[x] + "\n";

    File file = new File("/nfs/guille/groce/users/nicholsk/workspace3/SQLTest/BlockForTest.txt");
    Writer out = new OutputStreamWriter(new FileOutputStream(file)); // Here
    try
    {
        out.write(coverage);
    } finally {
        out.close();
    }
}

Anyone know what might be causing this?

Ciceronian answered 23/7, 2012 at 21:17 Comment(3)
What folder in eclipse did you put this txt file in?Percolate
Just the root directory of my project. Why?Ciceronian
I had this problem. I deleted the folder created programmatically and created it manually and the problem solved!!!Allodium
S
65

With sdk, you can't write to the root of internal storage. This causes your error.

Based on your code, to use internal storage with sdk:

final File dir = new File(context.getFilesDir() + "/nfs/guille/groce/users/nicholsk/workspace3/SQLTest");
dir.mkdirs(); //create folders where write files
final File file = new File(dir, "BlockForTest.txt");
Steenbok answered 23/7, 2012 at 21:32 Comment(4)
So where should I write this to? Could I throw it in assets and write there? I did do that with a database earlier. My main issue is I want to be able to read it later.Ciceronian
try File file = new File("/data/data/your.package.name/nfs/guille/groce/users/nicholsk/workspace3/SQLTest/BlockForTest.txt");Steenbok
better than my previous comment : File file = new File (context.getFilesDir(), "yourFolder");Steenbok
I had this problem. I deleted the folder created programmatically and created it manually and the problem solved!!!Allodium
P
3

Put the text file in the assets directory. If there isnt an assets dir create one in the root of the project. Then you can use Context.getAssets().open("BlockForTest.txt"); to open a stream to this file.

Percolate answered 23/7, 2012 at 21:33 Comment(1)
I looked up and found that apparently you can't write to anything in assets.Ciceronian

© 2022 - 2024 — McMap. All rights reserved.