2012-07-23 16 views
52

Sto tentando di salvare un po 'di copertura del blocco utilizzando una serie di numeri interi che semplicemente salva il numero di volte in cui un blocco viene eseguito. Per qualche ragione, però, quando provo a scrivere su alcuni file che ho creato ("BlockForHelper.txt" ad esempio, che ho realizzato appositamente in Eclipse e inserito nella directory del progetto), ottengo questo errore:Errore Android - Aperto non riuscito ENOENT

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 

e mi dà l'errore:

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

Qualcuno sa che cosa potrebbe causare questo?

+0

In quale cartella di eclissi hai inserito questo file txt? –

+0

Solo la directory principale del mio progetto. Perché? – NioShobu

+0

Ho avuto questo problema. Ho cancellato la cartella creata a livello di codice e l'ho creata manualmente e il problema è stato risolto !!! – breceivemail

risposta

63

Con sdk, non è possibile scrivere nella directory principale della memoria interna. Questo causa il tuo errore.

Edit:

Sulla base di codice, da utilizzare storage interno con 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"); 
+0

Quindi dove dovrei scrivere questo? Potrei buttarlo nelle risorse e scrivere lì? L'ho fatto prima con un database. Il mio problema principale è che voglio poterlo leggere più tardi. – NioShobu

+0

try File file = new File ("/ data/data/nome.package.name/nfs/guille/groce/users/nicholsk/workspace3/SQLTest/BlockForTest.txt"); – SteveR

+2

migliore del mio commento precedente: 'File file = nuovo File (context.getFilesDir()," yourFolder ");' – SteveR

3

messo il file di testo nella directory attivi. Se non ci sono risorse dir ne creare uno nella radice del progetto. Quindi è possibile utilizzare Context.getAssets().open("BlockForTest.txt"); per aprire un flusso su questo file.

+0

Puoi darmi un esempio del codice per questo? – NioShobu

+1

Ho alzato lo sguardo e ho scoperto che a quanto pare non è possibile scrivere su nulla nelle risorse. – NioShobu

Problemi correlati