2013-02-01 80 views
0

我想從文本文件中讀取多行。當我點擊下一個按鈕時,這些行應該逐一顯示。我能夠將字符串存儲在一個文件中並讀取第一行。但是當我嘗試使用下一個按鈕閱讀下一行時,它停止工作。任何人都可以告訴我一個解決方案。提前致謝。如何從文本文件中讀取下一行

我已經定義了以下

BufferedReader buffreader;  
String line; 
String fav; 
StringBuilder text; 
InputStream instream;  
String favQuote0; 

這是我的onCreate方法

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_save); 
    StringBuilder text = new StringBuilder();   

    try { 
     // open the file for reading 
     InputStream instream = openFileInput("myfilename.txt"); 

     // if file the available for reading 
     if (instream != null) {    
      // prepare the file for reading 
      InputStreamReader inputreader = new InputStreamReader(instream); 
      BufferedReader buffreader = new BufferedReader(inputreader); 

      while ((line = buffreader.readLine()) != null) {  
       text.append(line); 
       text.append('\n');     
       fav = text.toString();    
      } 
     } 
    } catch (IOException e) {} 

    TextView tv1 = (TextView)findViewById(R.id.textView2); 
    tv1.setText(fav); 
} 

這是我的下一個按鈕

public void next (View view1) {   
    try { 
     // open the file for reading 
     InputStream instream = openFileInput("myfilename.txt"); 

     // if file the available for reading 
     if (instream != null) { 
      while ((line = buffreader.readLine()) != null) {    
       text.append(line); 
       text.append('\n');     
       fav = text.toString();    
      } 
     } 
    } catch (IOException e) {} 

    TextView tv1 = (TextView)findViewById(R.id.textView2); 
    tv1.setText(fav); 
} 
+0

您是否在LogCat中看到任何錯誤? –

+0

什麼都沒有顯示 – user1995307

回答

-1

試試這個。這個我爲我工作

BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); 
StringBuffer bf = new StringBuffer(); 
String json = reader.readLine(); 
try { 
do { 

    bf.append(json); 
    json = reader.readLine(); 
}while (json != null); 
wt.flush(); 
wt.close(); 
Log.d("LOG", " read line output "+new String(bf)+" json "+json); 
reader.close();  
} catch (Exception e) { 
e.printStackTrace(); } 

wt是我用來寫行的緩衝寫入器。我從閱讀器讀取並寫入本地存儲的文件。

+0

Wt是什麼?我們必須定義它?它給了我一個錯誤,所以我無法運行它。如果運行它會從最後的位置讀取嗎?謝謝 – user1995307

+0

不贊成,因爲不太好看的while循環。 –

+0

我發現了這個問題。這是寫入文件的問題。我們必須以追加模式寫入文件,否則所有文件內容都將被重寫。代碼如下。 OutputStreamWriter out = new OutputStreamWriter(openFileOutput(「myfilename.txt」,MODE_APPEND));閱讀我的代碼很好,謝謝大家。 – user1995307

-2
try { 
// open the file for reading 
InputStream instream = new FileInputStream("myfilename.txt"); 

// if file the available for reading 
if (instream != null) { 
// prepare the file for reading 
InputStreamReader inputreader = new InputStreamReader(instream); 
BufferedReader buffreader = new BufferedReader(inputreader); 

    String line; 

    // read every line of the file into the line-variable, on line at the time 
    while (buffreader.hasNext()) { 
line = buffreader.readLine(); 
// do something with the line 
} 

} 
} catch (Exception ex) { 
    // print stack trace. 
} finally { 
// close the file. 
instream.close(); 
} 
+0

謝謝。它顯示一個錯誤「方法hasNext()是未定義的類型BufferedReader」這是什麼?如果我們給輸入流閱讀器添加新內容,並且緩衝閱讀器將從下一行讀取,或者它將從開始再次開始。我想從最後的位置讀取它。 – user1995307

+0

@sachin你有沒有給出任何鏈接? – user1995307

+0

BufferedReader沒有任何稱爲hasNext()的方法。 http://developer.android.com/reference/java/io/BufferedReader.html –

0

這兩個答案都做錯了。我會在我的代碼下面發表一篇描述。這是做這件事的正確方法。

private int mCurrentLine; 
private ArrayList<String> mLines; 
private TextView mTextView; 
private Button mButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_save); 

    mCurrentLine = -1; 
    mLines = new ArrayList<String>(); 
    mTextView = (TextView) findViewById(R.id.text_view); 
    mButton = (Button) findViewById(R.id.button); 

    try { 
     readLinesAndSaveToArrayList(); 
    } 

    catch (IOException e) { 
     e.printStackTrace(); 
    } 

    setTextAndIncrement(); 

    mButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      setTextAndIncrement(); 
     } 
    }); 
} 

private void readLinesAndSaveToArrayList() throws IOException { 
    File file = new File("myfilename.txt"); 

    if (!file.exists()) { 
     throw new FileNotFoundException("myfilename.txt was unable to locate"); 
    } 

    FileReader fileReader = new FileReader(file); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 
    String line; 

    while ((line = bufferedReader.readLine()) != null) { 
     mLines.add(line); 
    } 

    bufferedReader.close(); 
} 

private void setTextAndIncrement() { 
    if (mCurrentLine == mLines.size() - 1) { 
     return; 
    } 

    mCurrentLine++; 
    mTextView.setText(mLines.get(mCurrentLine)); 
} 

我要做的就是緩存在一個可擴展的ArrayList文件的內容。每行將被分配給數組中的索引,例如。 0,1,2等等。

mCurrentLine負責定位陣列。它從-1開始,因爲沒有當前行。在setTextAndIncrement()中,它將被設置爲0,它在數組中是第一個索引(第一行)。連續呼叫將增加位置並採取下一行。如果你達到了極限,我已經放入一個檢查看起來mCurrentLine是否等於線的最大尺寸(mLines.size() - 1,a - 1,因爲數組從0開始而不是1開始)。

除此之外,我會建議你在方法和變量上使用全長名稱;沒有必要把它們縮短,它只會讓閱讀變得更加困難。 XML也應該只包含低字母而不是駝峯。

+0

這不適合我。當我點擊按鈕時,我什麼也看不到 – user1995307

+0

當你的解決方案也不能工作時,不要把負面的評論放在別人的答案中! – user1995307

+0

@ user1995307我的代碼沒有缺陷,你一定做錯了什麼。你的意思是TextView沒有得到更新?你可能想檢查logcat,你沒有收到任何異常。 FileNotFoundException不是運行時異常,所以非常有可能找不到「myfilename.txt」,並且它不會崩潰。考慮將FileNotFoundException更改爲RuntimeException。另外請不要說其他的代碼不起作用,如果你沒有用盡它的可能性。 –