2014-02-27 159 views
0

我試圖讓我的應用程序從EditText寫入文本到文本文件並從它讀入到TextView。它從未更新過TextView,現在應用程序崩潰。任何建議,將不勝感激!無法讀取/寫入文件在android

public class MainActivity extends Activity implements OnClickListener { 

String file = Environment.getExternalStorageDirectory() + "/CSCI598.txt"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button rea = (Button) findViewById(R.id.reads1); 
    rea.setOnClickListener(this); 

    Button ap = (Button) findViewById(R.id.appends1); 
    ap.setOnClickListener(this); 

} 

private void toast(String text) 
{ 
    Context context = getApplicationContext(); 
    Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 
    toast.show(); 
} 

@SuppressWarnings("resource") 
@Override 
public void onClick(View v) { 

    TextView tv=(TextView)findViewById(R.id.textView1); 
    EditText et=(EditText)findViewById(R.id.editText1); 

    switch(v.getId()) { 
    case R.id.reads1: 

      try 
      { 
       FileInputStream fis = new FileInputStream(file); 
       BufferedReader bfr = new BufferedReader(new InputStreamReader(fis)); 
       String in; 
       StringBuffer stringBuffer = new StringBuffer();     
       while ((in = bfr.readLine()) != null) { 
        stringBuffer.append(in + "\n"); 
       } 
       tv.setText(stringBuffer.toString()); 
       toast("File successfully loaded."); 

      } 
      catch (Exception ex) 
      { 
       toast("Error loading file: " + ex.getLocalizedMessage()); 

      } 

     break; 

    case R.id.appends1: 

     String txt=et.getText().toString(); 

     try 
      { 
      FileWriter writer = new FileWriter(file); 
      writer.write(txt); 
      writer.flush(); 
      writer.close(); 

       toast("File successfully saved."); 
      } 
      catch (Exception ex) 
      { 
       toast("Error saving file: " + ex.getLocalizedMessage()); 
      } 

     break; 

    } 

} 

} 
+1

它在哪裏崩潰?您是否設法捕獲導致崩潰的LogCat輸出?您是否嘗試在調試器上運行代碼?你確定你有正確的文件/目錄權限? – MarsAtomic

+0

我正在使用android模擬器運行它,所以不確定權限。 Logcat顯示了大量的錯誤,我不知道我應該看什麼..它在我點擊'閱讀'時崩潰 – Prasad

+0

看到我的更新在答案 – Peshal

回答

2

。試着在你的代碼修改這一行:

String file = "sdcard/CSCI598.txt"; 

有了:

String file = Environment.getExternalStorageDirectory() + "/CSCI598.txt"; 

此外,作爲@Yahya提到請確保您在您的Android清單文件中有這樣的權限:

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

如果這不起作用。嘗試閱讀這樣的文件:

FileReader fr = new FileReader(file); 
BufferedReader inputReader = new BufferedReader(fr); 

然後使用你的while循環,因爲它是現在。

寫這樣的文件

FileWriter out = new FileWriter(file, true); 
out.write(txt + "\n"); 
out.close(); 
+0

我剛剛做到了。它不再在'讀'崩潰,但仍然不更新TextView ...我想知道如果我的追加函數有任何問題,或者它甚至被存儲? – Prasad

+0

我已經將該權限附加到清單。 – Prasad

+0

嘗試記錄stringBuffer。toString()在textview上設置以查看字符串緩衝區是否正確填充 – Peshal

0

提供崩潰日誌。

  1. 你給你的清單XML文件的SD卡讀寫權限?

<使用許可權 機器人:名字= 「android.permission.WRITE_EXTERNAL_STORAGE」 >< /使用許可權>

  1. 而不是使用像字符串文件的硬編碼路徑= 「SD卡/ CSCI598.txt」;以下使用

    String file = Environment.getExternalStorageDirectory()+「/CSCI598.txt」;

  2. 當您使用模擬器有你有很多SD卡空間,同時獲得使用Environment.getExternalStorageDirectory()的SD卡目錄中創建AVD

+0

我已經將該權限附加到清單。 – Prasad

+0

提供你的logcat –