2012-07-23 15 views
52

Estoy intentando guardar algo de cobertura de bloque utilizando una matriz de enteros que simplemente guarda el número de veces que se ejecuta un bloque. Por alguna razón, sin embargo, cuando intento escribir en algunos archivos que creé ("BlockForHelper.txt" por ejemplo, que hice específicamente en Eclipse y coloqué en el directorio del proyecto), recibo este error:Error de Android - Error abierto 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 

y me da el 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(); 
    } 
} 

Alguien sabe qué podría estar causando esto?

+0

¿En qué carpeta del eclipse pusiste este archivo txt? –

+0

Solo el directorio raíz de mi proyecto. ¿Por qué? – NioShobu

+0

Tuve este problema. Eliminé la carpeta creada programáticamente y la creé manualmente y el problema fue resuelto. – breceivemail

Respuesta

63

Con sdk, no puede escribir en la raíz del almacenamiento interno. Esto causa tu error

Editar:

Sobre la base de su código, para utilizar el almacenamiento interno con el 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

Entonces, ¿dónde debería escribir esto? ¿Podría arrojarlo en activos y escribir allí? Lo hice con una base de datos anterior. Mi problema principal es que quiero poder leerlo más tarde. – NioShobu

+0

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

+2

mejor que mi comentario anterior: 'File file = new File (context.getFilesDir()," yourFolder ");' – SteveR

3

poner el archivo de texto en el directorio activo. Si no hay un directorio de activos, cree uno en la raíz del proyecto. Luego puede usar Context.getAssets().open("BlockForTest.txt"); para abrir una secuencia a este archivo.

+0

¿Me puede dar un ejemplo del código para eso? – NioShobu

+1

Levanté la vista y descubrí que aparentemente no se puede escribir nada en los activos. – NioShobu

Cuestiones relacionadas