clapper213
clapper213

Reputation: 150

Reading from a file in Android Studio

I'm trying to read in a text file of words into an array or String where I would be able to access each word. Separating the words if it comes in one long String is no issue but I have having some real problems reading the file. I am using Android Studio and the file is under the assets folder (app/app/src/main/assets/wordsEasy.txt) So far I have the following code:

public String[] getWords(String difficulty){
    ArrayList<String> wordList = new ArrayList<String>();

    String[] words = new String[wordList.size()];

    String wordList = getQuestions()   //Location of error

    //Haven't finished here but would consist of transferring the words in the String into an array

    return words;
}

private static String getQuestions(Context ctx,String file_name) {

    AssetManager assetManager = ctx.getAssets();
    ByteArrayOutputStream outputStream = null;
    InputStream inputStream = null;
    try {
        inputStream = assetManager.open(file_name);
        outputStream = new ByteArrayOutputStream();
        byte buf[] = new byte[1024];
        int len;
        try {
            while ((len = inputStream.read(buf)) != -1) {
                outputStream.write(buf, 0, len);
            }
            outputStream.close();
            inputStream.close();
        } catch (IOException e) {
        }
    } catch (IOException e) {
    }
    return outputStream.toString();

}

I don't know how to get the context in this situation and would appreciate any help. Also if you know an alternative way to read the file to a String or array please share it.

Upvotes: 0

Views: 4256

Answers (2)

Lalit Pratap Singh
Lalit Pratap Singh

Reputation: 175

Check this, working for me

import android.content.Context;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {

    List<String> wordList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wordList = getWordsFromFile("text_file.txt", MainActivity.this);
        Toast.makeText(this,"Word Size:"+wordList.size(),Toast.LENGTH_SHORT).show();
        TextView textView = (TextView) findViewById(R.id.tv_words);
        for(String word : wordList){
            textView.append("\n"+word);
        }
    }



    public List<String> getWordsFromFile(String textFileName, Context context){
        List<String> wordList = new ArrayList<>();
        String textStr = "";
        AssetManager am = context.getAssets();
        try {
            InputStream is = am.open(textFileName);
            textStr = getStringFromInputStream(is);

        } catch (IOException e) {
            e.printStackTrace();
        }
        if(textStr !=null){
            String[] words = textStr.split("\\s+");
            for (int i = 0; i < words.length; i++) {
                words[i] = words[i].replaceAll("[^\\w]", "");
                wordList.add(words[i]);
            }
        }
        return wordList;
    }

    private static String getStringFromInputStream(InputStream is) {

        BufferedReader bufferedReader = null;
        StringBuilder stringBuilder = new StringBuilder();

        String line;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(is));
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return stringBuilder.toString();
    }
}

Upvotes: 1

Prachi
Prachi

Reputation: 3672

Make sure your assets folder is in your "app" project and not the outer project Then, you can get the file by simply using following code:

InputStream myFile = mContext.getAssets().open("myfile.txt");

enter image description here

Upvotes: 0

Related Questions