简体   繁体   中英

Reading From a File saved in the /res or /asset folder? Android

I am trying to read a text file and save each line of text into an ArrayList. I have tried various methods, including FileInputStream and BufferedReader. Here is the code that currently gets me the closest to what I am trying to do

try {       
    InputStream is = getResources().openRawResource(R.File.txt);        
    BufferedReader bufferedReader = new BufferedReader(new FileReader("File.txt"));
    String line;

    while((line = bufferedReader.readLine()) != null)
    {
        allText.add(line);
    }
    bufferedReader.close();
}
catch(IOException e)
{

}

allText is an ArrayList previously instantiated. Right now the file is saved in /res and I get an "invalid resource directory warning". I would like to know where to save the file properly and how to read from it.

The line should be

 InputStream is = getResources().openRawResource(R.File.txt); 
 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));

You have made an InputStream for resource file and use BufferedReader to read from the stream created.

Reading from /assets folder use getAssets() method

BufferedReader reader = null;
try {
    reader = new BufferedReader(
     new InputStreamReader(getAssets().open("File.txt"), "UTF-8")); 
    String myData = reader.readLine();
    while (myData != null) {
       myData = reader.readLine(); 
    }
} catch (IOException e) {
} finally {
    if (reader != null) {
         try {
             reader.close();
         } catch (IOException e) {
         }
    }
}

Reading file from /res/raw folder

 InputStream fileInputStream = getResources().openRawResource(R.raw.File);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte buf[] = new byte[1024];
        int len;
        try {
            while ((len = fileInputStream .read(buf)) != -1) {
                outputStream.write(buf, 0, len);
            }
            outputStream.close();
            fileInputStream .close();
        } catch (IOException e) {

        }
        return outputStream.toString();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM