52 votes

Erreur Android - Echec de l'ouverture ENOENT

J'essaie de sauvegarder la couverture de certains blocs 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éé spécifiquement dans Eclipse et placé dans le répertoire du projet), j'obtiens cette erreur :

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-il ce qui peut causer cela ?

65voto

SteveR Points 1322

Avec le sdk, vous ne pouvez pas écrire sur le Root du stockage interne. C'est la cause de votre erreur.

Edit :

Sur la base de votre code, pour utiliser le stockage interne avec le 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");

3voto

Jason Crosby Points 879

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X