web-dev-qa-db-fra.com

Android Erreur - Open Failed ENOENT

J'essaie de sauvegarder une couverture de bloc en utilisant un tableau d'entiers qui enregistre simplement le nombre de fois qu'un bloc est exécuté. Pour une raison quelconque, cependant, lorsque j'essaie d'écrire dans certains fichiers que j'ai créés ("BlockForHelper.txt" par exemple, que j'ai créés spécifiquement dans Eclipse et placés dans le répertoire du projet), le message d'erreur suivant s'affiche:

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

et me donne l'erreur:

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

Quelqu'un sait ce qui pourrait causer cela?

52
NioShobu

Avec sdk, vous ne pouvez pas écrire à la racine du stockage interne. Ceci cause votre erreur.

Modifier :

En fonction de votre code, pour utiliser la mémoire de stockage interne avec 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");
65
SteveR

Placez le fichier texte dans le répertoire des actifs. S'il n'y a pas d'actif, créez-en un à la racine du projet. Ensuite, vous pouvez utiliser Context.getAssets().open("BlockForTest.txt"); pour ouvrir un flux vers ce fichier.

3
Jason Crosby