从 Android Studio 中的文件读取

Reading from a file in Android Studio

我正在尝试将单词的文本文件读入数组或字符串,以便我能够访问每个单词。如果它出现在一个长字符串中,将单词分开是没有问题的,但我在读取文件时遇到了一些实际问题。我正在使用 Android Studio,文件位于资产文件夹下 (app/app/src/main/assets/wordsEasy.txt) 到目前为止,我有以下代码:

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

}

我不知道如何在这种情况下获取上下文,希望得到任何帮助。此外,如果您知道将文件读取为字符串或数组的替代方法,请分享。

确保您的资产文件夹在您的 "app" 项目中而不是外部项目 然后,您只需使用以下代码即可获取文件:

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

检查这个,为我工作

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