2017-05-26 27 views
-1

私の目標は、アプリケーションからテキストファイルに多くのハイスコアを保存することです。私はFileOutputStreamを使用して作成します。私はファイルから読み込み、各行を配列リスト項目に入れたいと思っています。 InputStreamReaderを使用している間、テキストのすべての行をテキストファイルから変数sにロードすることができます。今私の問題は、テキストファイルから各行を取り出し、配列リスト項目に保存することです。どのように私はこれを達成するだろうか?テキストファイルを1行ずつ読み込む方法は?

Example string variables for high scores: 
    String myStr = "Ryan 150 hard \n"; 
    String myStr2 = "Andrew 200 Medium \n"; 
    public void saveClick(){ 

    try{ 

     //String myNum = Integer.toString(life); 

     FileOutputStream fOut = openFileOutput("storetext.txt", Context.MODE_PRIVATE); 
     OutputStreamWriter outputWriter = new OutputStreamWriter(fOut); 

     outputWriter.write(myStr); 
     outputWriter.write(myStr2); 
     outputWriter.close(); 
     /*OutputStreamWriter out = new OutputStreamWriter(openFileOutput(STORETEXT, 0)); 

     out.write(life); 

     out.close();*/ 

     Toast.makeText(getApplicationContext(), "Save Successful", Toast.LENGTH_LONG).show(); 

    } 
    catch(Throwable t){ 

     Toast.makeText(getApplicationContext(), "Save Unsuccessful", Toast.LENGTH_LONG).show(); 

    } 

} 

public void readFileInEditor(){ 

    try{ 

     FileInputStream fileIn = openFileInput("storetext.txt"); 

     InputStreamReader InputRead = new InputStreamReader(fileIn); 

     char [] inputBuffer = new char[READ_BLOCK_SIZE]; 
     String s = ""; 
     int charRead; 


     while ((charRead=InputRead.read(inputBuffer))>0){ 

      //char to string conversion 
      String readString = String.copyValueOf(inputBuffer,0,charRead); 

      s += readString; 

     } 

     InputRead.close(); 

     Toast.makeText(getApplicationContext(), "New Text: " + s , Toast.LENGTH_LONG).show(); 

     //myText.setText("" + s); 

     try{ 

      //life = Integer.parseInt(s); 

      //Toast.makeText(getApplicationContext(), "My Num: " + life , Toast.LENGTH_LONG).show(); 

     } 
     catch(NumberFormatException e){ 

      //Toast.makeText(getApplicationContext(), "Could not get number" + life , Toast.LENGTH_LONG).show(); 

     } 

    } 
    catch(java.io.FileNotFoundException e){ 

     //have not created it yet 

    } 

    catch(Throwable t){ 

     Toast.makeText(getApplicationContext(), "Exception: "+t.toString(), Toast.LENGTH_LONG).show(); 

    } 



} 

答えて

0

(1)BufferedReader::readline()メソッド、または(2)Scanner::nextLine()メソッドを使用する方が簡単です。そして、各行をforループ内のList<String>に追加します。

簡単な例:迅速な対応のための

List<String> lines = new ArrayList<>(); 
String curLine = null; 

BufferedReader reader = new BufferedReader(new FileReader("storetext.txt")); 
while ((curLine = reader.readLine()) != null) { 
    lines.add(curLine); 
} 
+0

感謝。 BufferedReaderメソッドを使用して、forループがどのように見えたらいいですか?私はちょうどjavaに新しいですか? –

+0

@RyanWing答えにサンプルコードを追加しました – volatilevar

+0

私が持っていたものから追加したコードを実装しました。私はあなたのコードを含むときにFileInputStreamとDataInputStreamを保持し、テストとして2つの文字列変数を使用しています。私は結果をトーストするときに、テキストファイルの最初の行の代わりに2回、テキストファイルの2行目の代わりに2行目のテキストファイルを取得しています。なぜそれが起こっているのだろうか? –

関連する問題