2012-07-23 61 views
52

Tôi đang cố lưu một số phạm vi chặn bằng cách sử dụng một dãy số nguyên chỉ đơn giản là tiết kiệm số lần khối được thực thi. Tuy nhiên, vì lý do nào đó, khi tôi cố gắng viết một số tệp mà tôi đã tạo (ví dụ: BlockForHelper.txt), tôi đã tạo ra trong Eclipse và đặt trong thư mục dự án, tôi nhận được lỗi này:Lỗi Android - Mở Không thành công 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 

và cung cấp cho tôi lỗi:

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

Bất kỳ ai biết điều gì có thể gây ra điều này?

+0

Bạn đã đặt tệp txt này vào thư mục nào trong nhật thực? –

+0

Chỉ thư mục gốc của dự án của tôi. Tại sao? – NioShobu

+0

Tôi gặp sự cố này. Tôi đã xóa thư mục được tạo lập trình và tạo thủ công và giải quyết vấn đề !!! – breceivemail

Trả lời

63

Với sdk, bạn không thể ghi vào thư mục gốc của bộ nhớ trong. Điều này gây ra lỗi của bạn.

Edit:

Dựa trên mã của bạn, sử dụng lưu trữ nội bộ với 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

Vậy tôi nên viết cái này ở đâu? Tôi có thể ném nó vào tài sản và viết ở đó không? Tôi đã làm điều đó với một cơ sở dữ liệu trước đó. Vấn đề chính của tôi là tôi muốn có thể đọc nó sau này. – NioShobu

+0

thử tệp Tệp = tệp mới ("/ dữ liệu/dữ liệu/your.package.name/nfs/guille/groce/người dùng/nicholsk/workspace3/SQLTest/BlockForTest.txt"); – SteveR

+2

tốt hơn so với bình luận trước đây của tôi: 'File file = new File (context.getFilesDir()," yourFolder ");' – SteveR

3

Đặt các tập tin văn bản trong thư mục tài sản. Nếu không có một tài sản dir tạo một trong thư mục gốc của dự án. Sau đó, bạn có thể sử dụng Context.getAssets().open("BlockForTest.txt"); để mở luồng cho tệp này.

+0

Bạn có thể cho tôi một ví dụ về mã cho điều đó không? – NioShobu

+1

Tôi nhìn lên và thấy rằng dường như bạn không thể viết cho bất cứ điều gì trong tài sản. – NioShobu

Các vấn đề liên quan