2011-06-21 28 views
7

Benim res/raw klasörüne yerleştirdiğim bir words.txt dosyam var. Dosyadaki kelimeler boşlukla ayrılır. Dosya sözcüğünü kelime ile okumak için Android/Java kodu'u yazarken çok zorlanıyorum.Android raw text dosyasını okuma

+0

burada en iyi çözüm bulundu: 'iken ((cari = bis: byte okuma byte için http://stackoverflow.com/a/5675934/336990 – CoDe

cevap

4

Oku res/raw klasörden dize

için
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

ham klasöründen dosyadan kelime getResources().openRawResource(R.raw.song);
Sonra InputStream almak kullanarak ham klasöründen veri oku Aşağıdaki yaklaşımı

ile denemek almak için Bayt dizisi 'daki veriler verileri boşlukla ayırır.

aşağıdaki kodu

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(" "); 

Teşekkür Deepak

+0

-1 ... ben bu modeli gördüm .read())! = -1) {... birçok yanıtta ... yayınlayan kişi (siz değil) ilk önce – Selvin

4

basit bir Scanner kullanmaktır kullanın.

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

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

Varsayılan sınırlayıcı boşluktur (boşluk dahil). Eğer sadece alan üzerinde tetiklemek istiyorsanız onu oluşturduktan sonra s.useDelimiter(" "); kullanın.

+0

çekilmelidir. Bu kodu sadece birkaç kelimesi olan bir metin dosyası ile kullanmanız yeterlidir. ince. Fakat 100.000 kelime içeren bir dosyayı kullandığımda, emülatör yanıt vermiyor. Neden düşünüyorsun? –

+0

Eh ... Bu çözümün aşağı tarafı, "Tarayıcı" her arama için yeni dizeler oluşturacak ve gelecek için pahalı olabilir. Ama bu gerçekten başka bir sorundur ve yeni bir soruda sorulmalıdır ** (* Bölünmüş (..) 'metodu yeni dizeler yaratmadığından beri büyük dosyalar varsa @Sunil Kumar Sahoo çözümünü kullanırdım temel dizeyi yeniden kullanır *). – dacwe

2

Aynı sorularım vardı ve yukarıdaki cevaplar doğru olsa da başarılı bir şekilde çalışmaya başlayamadım. Ben neden tam emin değilim

// 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(); 
} 

: Bu neredeyse kesin Benim açımdan operatör hatası ve cehalet - ama her ihtimale karşı Birisi nasıl görmek istiyor - - n00b sonunda yaptılar, işte çözüm Bu, benim için temelden farklı göründüğü gibi olmadığında benim için çalıştı - ama dediğim gibi - muhtemelen benim üstümdeki operatör hatasıydı.

+0

Ayrıca bir Sunil Kumar Sahoo önerdiği vs bu yöntemin verimi (ya da onun eksikliği) hakkında herhangi bir fikir duymak isterim. –

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()); 
    } 

}