2012-07-23 12 views
52

Próbuję zapisać część pokrycia bloku za pomocą tablicy liczb całkowitych, która po prostu zapisuje liczbę razy wykonywany blok. Z jakiegoś powodu, gdy próbuję pisać do niektórych plików, które utworzyłem ("BlockForHelper.txt" na przykład, które zrobiłem specjalnie w Eclipse i umieściłem w katalogu projektu), pojawia się ten błąd:Błąd systemu Android - Otwarcie nie powiodło się 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 

i daje mi błąd:

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

ktoś wie co może być przyczyną tego?

+0

W jakim folderze w eclipse umieściłeś ten plik txt? –

+0

Tylko katalog główny mojego projektu. Czemu? – NioShobu

+0

Miałem ten problem. Usunąłem folder utworzony programowo i utworzyłem go ręcznie, a problem rozwiązany !!! – breceivemail

Odpowiedz

63

W przypadku sdk nie można pisać w katalogu głównym pamięci wewnętrznej. To powoduje twój błąd.

Edit:

oparciu o kodzie, aby korzystać z pamięci wewnętrznej z 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

Więc gdzie mam to napisać? Czy mogę rzucić to w aktywa i napisać tam? Zrobiłem to wcześniej w bazie danych. Moim głównym problemem jest to, że chcę go przeczytać później. – NioShobu

+0

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

+2

lepiej niż mój poprzedni komentarz: 'Plik file = new File (context.getFilesDir()," yourFolder ");' – SteveR

3

Umieść plik tekstowy w katalogu aktywów. Jeśli nie ma katalogu zasobów, utwórz go w katalogu głównym projektu. Następnie możesz użyć Context.getAssets().open("BlockForTest.txt");, aby otworzyć strumień do tego pliku.

+0

Czy możesz podać przykład kodu? – NioShobu

+1

Podniosłem wzrok i stwierdziłem, że najwyraźniej nie możesz pisać do niczego w zasobach. – NioShobu

Powiązane problemy