Android 错误 - 打开失败 ENOENT
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11620641/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android Error - Open Failed ENOENT
提问by NioShobu
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:
我正在尝试使用一个整数数组来保存一些块覆盖率,该数组只是保存了一个块的执行次数。但是,出于某种原因,当我尝试写入我创建的一些文件(例如,“BlockForHelper.txt”,我专门在 Eclipse 中创建并放置在项目目录中)时,我收到此错误:
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?
有谁知道这可能是什么原因造成的?
回答by SteveR
With sdk, you can't write to the root of internal storage. This cause your error.
使用sdk,您无法写入内部存储的根目录。这会导致您的错误。
Edit :
编辑 :
Based on your code, to use internal storage with 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");
回答by Jason Crosby
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.
将文本文件放在资产目录中。如果没有资产目录,请在项目的根目录中创建一个。然后您可以使用Context.getAssets().open("BlockForTest.txt");
打开此文件的流。