2011-06-21 9 views
7

私はres/rawフォルダに入れたwords.txtファイルを持っています。ファイル内の単語はスペースで区切られています。私は苦労してAndroid/Javaコードを書き、単語ごとにファイルを読む。Android生のテキストファイルを読む

+0

私はここに最善の解決策が見つかりました:http://stackoverflow.com/a/5675934/336990 – CoDe

答えて

4

res/rawフォルダから文字列

に読む
InputStream inputStream = getResources().openRawResource(R.raw.yourtextfile); 
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream)); 
String eachline = bufferedReader.readLine(); 
while (eachline != null) { 
    // `the words in the file are separated by space`, so to get each words 
    String[] words = eachline.split(" "); 
    eachline = bufferedReader.readLine(); 
} 
3

生のフォルダからファイルから単語がgetResources().openRawResource(R.raw.song);
を使用して、生のフォルダからデータを読み込み、次のアプローチ

てみてください取得するために次に入力ストリームを取得しますバイト配列 のデータは、スペースでデータを分割します。

は、次のコードに

InputStream is =getResources().openRawResource(R.raw.song); 
      BufferedInputStream bis = new BufferedInputStream(is); 

      ByteArrayBuffer baf = new ByteArrayBuffer(50); 

      int current = 0; 

      while ((current = bis.read()) != -1) { 

       baf.append((byte) current); 

      } 

      byte[] myData = baf.toByteArray(); 
      String dataInString = new String(myData); 
      String[] words = dataInString.split(" "); 

おかげ ディーパック

+0

を-1バイトでバイトを読み取るために...私は、このパターンを見てきました: '((現在=ビスしばらくあなたが投稿した(あなたではない)投稿した人は、最初に撃つべきです – Selvin

4

最も単純なScannerを使用することですを使用します。

Scanner s = new Scanner(getResources().openRawResource(R.raw.text_file)); 

try { 
    while (s.hasNext()) { 
     String word = s.next(); 
     // .... 
    } 
} finally { 
    s.close(); 
} 

デフォルトの区切り文字は空白(スペースを含む)です。あなたがそれを作成した後にs.useDelimiter(" ");を使用してスペース上でのみトリガーしたい場合。

+0

このコードを、ほんの少しの単語しかないテキストファイルで使用すると、ちょうどうまくいきます良い。しかし、約100,000語のファイルを使用すると、エミュレータは応答を停止します。どうして...と思うのですか? –

+0

さて、このソリューションでは、 'Scanner'が' next() 'への呼び出しごとに新しい文字列を作成し、それが高価になる可能性があります。しかし、それは本当に**別の問題であり、新しい質問で尋ねられるべきです**(* 'split(..)'メソッドは新しい文字列を作成しないので大きなファイルを持っていれば@Sunil Kumar Sahooソリューションを使用します。基になる文字列を再利用*)。 – dacwe

2

私はこの同じ質問をしましたが、上記の回答は間違いなく正しいですが、正常に動作するようにはできませんでした。私は、なぜ正確にはわからない

// this is just the click handler for a button... 
public void loadStatesHandler(View v) { 
    try { 
     String states = getStringFromRaw(this); 
     readOutput.setText(states); 
    } 
    catch(Throwable t) { 
     t.printStackTrace(); 
    } 
} 

private String getStringFromRaw(Context c) throws IOException { 
     Resources r = c.getResources(); 
     InputStream is = r.openRawResource(R.raw.states); 
     String statesText = convertStreamToString(is); 
     is.close(); 
     return statesText; 
} 

private String convertStreamToString(InputStream is) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    int i = is.read(); 
    while (i != -1) { 
     baos.write(i); 
     i = is.read(); 
    } 
    return baos.toString(); 
} 

: これはほぼ確実に私の一部にオペレータのエラーと無知だった - しかし、念のために、誰かが私どのように見たい - - N00Bは最終的にそれをやった、ここに私のソリューションです。これは私にとってはうまくいきませんでした。なぜなら、基本的に違って見えないからです。

+0

私はこの方法の効率(またはその欠如!)についての意見を聞いても大好きです。Sunil Kumar Sahooが提案したものと比較して... –

5
//put your text file to raw folder, raw folder must be in resource folder. 

private TextView tv; 
private Button btn; 

    btn = (Button)findViewById(R.id.btn_json); 
    tv = (TextView)findViewById(R.id.tv_text); 

    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      SimpleText(); 


     } 
    }); 

private void SimpleText(){ 

    try { 


     InputStream is = this.getResources().openRawResource(R.raw.simpletext); 
     byte[] buffer = new byte[is.available()]; 
     while (is.read(buffer) != -1); 
     String jsontext = new String(buffer); 



     tv.setText(jsontext); 

    } catch (Exception e) { 

     Log.e(TAG, ""+e.toString()); 
    } 

} 
関連する問題