2012-05-28 45 views
11

Tôi đang cố gắng viết một tệp văn bản đơn giản trên hệ thống Android. Đây là mã của tôi:Android - Chỉ đọc Hệ thống tệp IOException

public void writeClassName() throws IOException{ 
    String FILENAME = "classNames"; 
    EditText editText = (EditText) findViewById(R.id.className); 
    String className = editText.getText().toString(); 

    File logFile = new File("classNames.txt"); 
     if (!logFile.exists()) 
     { 
      try 
      { 
      logFile.createNewFile(); 
      } 
      catch (IOException e) 
      { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
     } 
     try 
     { 
      //BufferedWriter for performance, true to set append to file flag 
      BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); 
      buf.append(className); 
      buf.newLine(); 
      buf.close(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Tuy nhiên, mã này tạo ra lỗi "java.io.IOException: open failed: EROFS (Read-only file system)". Tôi đã cố gắng bổ sung thêm quyền truy cập vào tập tin Manifest của tôi như sau không thành công:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="hellolistview.com" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".ClassView" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".AddNewClassView" 
     /> 

</application> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Bất cứ ai có bất cứ ý tưởng gì vấn đề là?

Trả lời

57

Vì bạn đang cố gắng ghi tệp vào thư mục gốc, bạn cần phải chuyển đường dẫn tệp vào thư mục tệp của mình.

Ví dụ

String filePath = context.getFilesDir().getPath().toString() + "/fileName.txt"; 
File f = new File(filePath); 
+0

này đã làm việc cho tôi. Cảm ơn. –

2

Cố gắng sử dụng cách tiếp cận từ article này trong phát triển hướng dẫn:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 
+0

Điều này làm việc cho tôi, nhưng tôi đang xử lý các chuỗi. Có anyway để sử dụng FileOutputStream để viết một chuỗi thay vì byte? –

+1

Những gì ông đặt là viết một chuỗi, chỉ là biểu diễn byte của chuỗi. Khi bạn xem các tập tin trong một trình soạn thảo văn bản, hoặc đọc nó trở lại (như một chuỗi), bạn sẽ nhận được các đại diện chuỗi của w/e bạn đã viết. – Jug6ernaut

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