Чтение необработанного текстового файла Android - PullRequest
8 голосов
/ 21 июня 2011

У меня есть файл words.txt, который я поместил в мою папку res / raw . Слова в файле разделены пробелом. Мне трудно написать код Android / Java , чтобы прочитать файл слово за словом.

Ответы [ 5 ]

7 голосов
/ 21 июня 2011

Чтение из папки 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();
}
6 голосов
/ 23 апреля 2013
//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());
    }

}
4 голосов
/ 21 июня 2011

Самое простое - использовать Сканер .

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

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

Разделителем по умолчанию является пробел (включая пробел).Если вы хотите, чтобы он срабатывал только в пространстве, используйте s.useDelimiter(" "); после его создания.

3 голосов
/ 21 июня 2011

Чтобы получить слова из файла из необработанной папки, попробуйте следующий подход

Считайте данные из необработанной папки, используя 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(" ");

Спасибо Deepak

2 голосов
/ 22 декабря 2011

У меня был тот же вопрос, и хотя приведенные выше ответы, вероятно, верны, я не смог заставить их работать успешно.Это было почти наверняка ошибкой оператора и невежеством с моей стороны - но на тот случай, если кто-то захочет увидеть, как я - n00b - наконец-то сделал это, вот мое решение:

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

Я не совсем уверенпочему это сработало для меня, когда вышеперечисленное не сработало, поскольку это не выглядит принципиально иным, но, как я уже сказал, это была, вероятно, ошибка оператора с моей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...