Android错误 – 打开失败ENOENT
我正在尝试使用一个整数数组来保存一些数据块的覆盖范围,这个数组只是简单地保存了一个数据块的执行次数。 不过,由于某些原因,当我尝试写入一些我创build的文件(例如我在Eclipse中制作的“BlockForHelper.txt”,并将其放在项目目录中)时,出现以下错误:
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
并给了我错误:
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(); } }
任何人都知道这可能是什么原因?
使用sdk,您不能写入内部存储的根目录。 这会导致你的错误。
编辑:
根据您的代码,使用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");
将文本文件放在资产目录中。 如果没有资产目录在项目的根目录中创build一个。 然后你可以使用Context.getAssets().open("BlockForTest.txt");
打开一个stream到这个文件。