ブロックの実行回数を単純に保存する整数の配列を使用して、ブロックカバレッジを保存しようとしています。ただし、何らかの理由で、作成したいくつかのファイル(たとえば、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");
テキストファイルをアセットディレクトリに配置します。アセットディレクトリがない場合は、プロジェクトのルートにアセットを作成します。その後、Context.getAssets().open("BlockForTest.txt");
を使用して、このファイルへのストリームを開くことができます。