2014-12-26 78 views
0

我正在編寫一個程序,需要能夠寫入文本文件並稍後再讀取它們。要閱讀它們,我將它們設置爲viewtext。然而,視圖文本從不顯示任何內容。我已經縮小了myReader.readLine()返回NULL,這意味着我不寫任何文件或更可能,我沒有正確讀取文件。爲什麼我的viewtext不顯示任何內容?

會很感激的任何幫助,這,謝謝:)

public class openTable extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_opentable); 
     File file = new File(getFilesDir()+"/table.xml"); 

     try { 
      file.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(file); 
      OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
      myOutWriter.append("Test\n"); 
      fOut.close(); 
      Toast.makeText(openTable.this,"File Written",Toast.LENGTH_SHORT).show();} 
     catch (Exception e) { 
      Toast.makeText(openTable.this,"File Not Written",Toast.LENGTH_SHORT).show(); 
     } 

     Log.d("FILEDIR",getFilesDir().toString()); 
     TextView displayFile = (TextView) findViewById(R.id.displayFile); 

     try { 
      FileInputStream fIn = new FileInputStream(file); 
      BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 
      String aDataRow = ""; 
      String aBuffer = ""; 

      if(myReader.readLine() != null) { 
       Log.d("TEST","YES"); 
      } else{ 
       Log.d("TEST","NO"); 
      } 

      while ((aDataRow = myReader.readLine()) != null) { 
       Log.d("ADATAROW",aDataRow); 
       aBuffer += aDataRow + "\n"; 
        Log.d("ABUFFER",aBuffer); 
      } 

      displayFile.setText(aBuffer); 
      myReader.close();  
      Toast.makeText(openTable.this,"File Read",Toast.LENGTH_SHORT).show();} 
     catch (Exception e) { 
      Toast.makeText(openTable.this,"File Not Read",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+2

您是否已將'WRITE_EXTERNAL_STORAGE'權限添加到您的'AndroidManifest.xml'文件中。如果沒有,這可以解釋你的問題,因爲你永遠無法寫入文本文件。 – Willis

+0

LogCat是否輸出任何錯誤? – tambykojak

回答

0

有你應該改變一些事情。

  1. 之前讀取數據到您的緩衝區,你是否myReader.readLine()null。這個if-else塊的問題在於你讀取了文件的第一行並丟棄了結果。請記住readLine()返回String。既然你在你的例子中只寫了一行到你的文件,你將永遠不會得到它,因爲你只是把它扔掉。 因此,刪除if-else塊或將結果保存在變量中。

  2. 將數據寫入文件時,應在myOutWriter.append("Test\n");之後立即調用myOutWriter.flush();。在處理數據流時,這是一個很好的做法,可以確保數據的正確寫入。

注意:正如因爲這一個側面說明在評論中提到:在您提供您沒有任何數據寫入到存儲設備的例子。因此,您的應用不需要任何權限,因爲您的所有數據都是臨時的。

+0

感謝Sebbas的幫助! 1.刪除if-else塊 2.包含myOutWriter.flush(); 包括這兩個固定的問題。也感謝讓我知道這是內部存儲。我已經將其更改爲外部存儲器! –

+0

沒問題,希望現在能夠運作! –

相關問題