2011-10-28 10 views
2

私はこのコードを使用しています。アンドロイドで行ごとに読む方法は?

try{ 
      // Open the file that is the first 
      // command line parameter 
      FileInputStream fstream = new FileInputStream("config.txt"); 
      // Get the object of DataInputStream 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      while ((br.readLine()) != null) { 
       temp1 = br.readLine(); 
       temp2 = br.readLine(); 

      } 

      in.close(); 
    }catch (Exception e){//Catch exception if any 
    Toast.makeText(getBaseContext(), "Exception", Toast.LENGTH_LONG).show(); 
    } 
    Toast.makeText(getBaseContext(), temp1+temp2, Toast.LENGTH_LONG).show(); 

これは例外を示しており、temp1とtemp2を更新していません。

+1

あなたは2つの異なる変数の同じ行を保存しますか?または、temp1とtemp2の最後の2行を保存したいだけですか? – SERPRO

+0

最初の2行のファイルを2つの異なる変数に保存します。 – xkrlaix

答えて

7

- 私は強く、A推薦すること)は、例えば、特定のタイプとしてキャッチしますIOException、b)メッセージやスタックトレースでログ表示する、c)Eclipseでプログラミングしている場合、LogMatでDDMSの観点から少なくともチェックする - おそらくAndroidがconfig.txtファイルを見つけられないためです開こうとしている。通常、あなたのような最も単純なケースでは、アプリケーションにプライベートなファイルは、openFileInput-see the documentationを使って開きます。

例外を除いて、読み取りループに問題があります。入力する前に空の文字列を初期化し、whileの条件で入力する必要があります。

String line = ""; 
while ((line = br.readLine()) != null) { 
    // do something with the line you just read, e.g. 
    temp1 = line; 
    temp2 = line; 
} 

ただし、最初の2行を異なる変数に保存するだけの場合は、ループは必要ありません。あなたのconfig.txtファイルがあなたのコードがwhile条件にそれを消費だけで1行、その後、temp1temp2が含まれていますので、もしreadLineを呼び出して他の人がすでに指摘したように

String line = ""; 
if ((line = br.readLine()) != null) 
    temp1 = line; 
if ((line = br.readLine()) != null) 
    temp2 = line; 

は、ラインを消費し得るnullもうテキストがないので、割り当てられました読む。

+0

私はこれを使用しています FileInputStream fstream =新しいopenFileInput( "config.txt"); が動作しません。それはopenFileInputを解決できません。 – xkrlaix

+0

私の答えにリンクされているドキュメントから分かるように、 'openFileInput'は' Activity'が由来する 'Context'のメソッドです。したがって、アクティビティでスニペットを使用している場合は、既に 'openFileInput'が利用可能であるはずです。それ以外の場合は、ファイルを読み込むメソッドまたはクラスに 'Context'インスタンスを渡す必要があります。ありがとうございます。 –

+0

それは実際に働いた。 – xkrlaix

1
try{ 
     // Open the file that is the first 
     // command line parameter 
     FileInputStream fstream = new FileInputStream("config.txt"); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String line = ""; 
     while ((line = br.readLine()) != null) { 
      temp1 = line; 
      temp2 = line; 

     } 

     in.close(); 
}catch (Exception e){//Catch exception if any 
Toast.makeText(getBaseContext(), "Exception", Toast.LENGTH_LONG).show(); 
} 
Toast.makeText(getBaseContext(), temp1+temp2, Toast.LENGTH_LONG).show(); 
1

br.readLine()inはすでに行を消費しています。

試してみてくださいあなたが見例外この

LineNumberReader reader = new LineNumberReader(new FileReader("config.txt"))); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     //doProcessLine 
    } 
0

あなたがしなければならない最初の2行を保存したい場合:

try 
{ 
    // Open the file that is the first 
    // command line parameter 
    FileInputStream fstream = new FileInputStream("config.txt"); 
    // Get the object of DataInputStream 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String line = ""; 
    if((line = br.readLine()) != null) 
     temp1 = line; 
    if((line = br.readLine()) != null) 
     temp2 = line; 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
+0

"config.txt"が見つからないため実際にその例外が表示されます。私が "FileInputStream fstream = new openFileInput(" config.txt ");"を使用すると、それを認識しない。 – xkrlaix

+0

それは別の問題です。とにかく、そのコードはファイルの最初の2行を取得する必要があります(存在する場合)。 :) – SERPRO

+0

ええ、彼らは実際に存在します。私はそれらを別々に見た。 – xkrlaix

関連する問題