Android читать текстовый файл необработанных ресурсов

Все просто, но не работает так, как должно.

У меня есть текстовый файл, добавленный в качестве сырого ресурса. Текстовый файл содержит текст как:

б) ЕСЛИ ПРИМЕНИМОЕ ЗАКОНОДАТЕЛЬСТВО ТРЕБУЕТ ЛЮБЫХ ГАРАНТИЙ, ОТНОСЯЩИХСЯ К ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ВСЕ ТАКИЕ ГАРАНТИИ ОГРАНИЧЕНО В ДЛИТЕЛЬНОСТИ В ДЕСЯТЬ (90) ДНИ ОТ ДАТЫ ПОСТАВКИ.

(c) НЕТ УСТНОЙ ИЛИ ПИСЬМЕННОЙ ИНФОРМАЦИИ ИЛИ СОВЕТЫ, ПОЛУЧЕННЫЕ ВИРТУАЛЬНЫМ ОРИЕНТИРОВАНИЕМ, ЕГО ДИЛЕРЫ, ДИСТРИБЬЮТОРЫ, АГЕНТЫ ИЛИ СОТРУДНИКИ СОЗДАЮТ ГАРАНТИЮ ИЛИ ЛЮБОЙ СПОСОБ УВЕЛИЧИТЬ ОБЛАСТЬ ЛЮБОГО ГАРАНТИЯ, ПРЕДОСТАВЛЯЕМАЯ ЗДЕСЬ.

(d) (только США) НЕКОТОРЫЕ ГОСУДАРСТВА НЕ Разрешить исключение подразумеваемых ГАРАНТИИ, ПОЭТОМУ ВЫШЕ ИСКЛЮЧЕНИЕ МОЖЕТ НЕ ОТНОСИТСЯ К ВАМ. ЭТА ГАРАНТИЯ ДАЕТ ВЫ ОСОБЕННЫЕ ЮРИДИЧЕСКИЕ ПРАВА И МОЖЕТЕ ТАКЖЕ ИМЕЮТ ДРУГИЕ ПРАВОВЫЕ ПРАВА, КОТОРЫЕ В зависимости от государства до государства.

На моем экране у меня есть макет, как это:

 

            

                    
              

    

Код для чтения необработанного ресурса:

TextView txtRawResource= (TextView)findViewById(R.id.txtRawResource);

txtDisclaimer.setText(Utils.readRawTextFile(ctx, R.raw.rawtextsample);

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try {
        i = inputStream.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
        }
        inputStream.close();
    } catch (IOException e) {
        return null;
    }
    return byteArrayOutputStream.toString();
}

Показывается текст get, но после каждой строки я получаю странный символ [] Как я могу удалить этот символ? Я думаю, что это новая линия.

РАБОЧЕЕ РЕШЕНИЕ

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();

    try {
        while (( line = buffreader.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
    } catch (IOException e) {
        return null;
    }
    return text.toString();
}
вопрос задан 3.11.2010
Alin
4296 репутация

9 ответов


  • 143 рейтинг

    Вы можете использовать это:

        try {
            Resources res = getResources();
            InputStream in_s = res.openRawResource(R.raw.help);
    
            byte[] b = new byte[in_s.available()];
            in_s.read(b);
            txtHelp.setText(new String(b));
        } catch (Exception e) {
            // e.printStackTrace();
            txtHelp.setText("Error: can't show help.");
        }
    
    ответ дан Vovodroid, с репутацией 1463, 15.04.2011
  • 54 рейтинг

    Что делать, если вы используете символьный BufferedReader вместо байтового InputStream?

    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line = reader.readLine();
    while (line != null) { ... }
    

    Не забывайте, что readLine () пропускает новые строки!

    ответ дан weekens, с репутацией 4824, 3.11.2010
  • 26 рейтинг

    Если вы используете IOUtils из apache "commons-io", это еще проще:

    InputStream is = getResources().openRawResource(R.raw.yourNewTextFile);
    String s = IOUtils.toString(is);
    IOUtils.closeQuietly(is); // don't forget to close your streams
    

    Зависимости: http: // mvnrepository. com / artifact / commons-io / commons-io

    Maven:

    
        commons-io
        commons-io
        2.4
    
    

    Gradle:

    'commons-io:commons-io:2.4'
    
    ответ дан tbraun, с репутацией 2048, 26.11.2012
  • 3 рейтинг

    Скорее сделайте это так:

    // reads resources regardless of their size
    public byte[] getResource(int id, Context context) throws IOException {
        Resources resources = context.getResources();
        InputStream is = resources.openRawResource(id);
    
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
    
        byte[] readBuffer = new byte[4 * 1024];
    
        try {
            int read;
            do {
                read = is.read(readBuffer, 0, readBuffer.length);
                if(read == -1) {
                    break;
                }
                bout.write(readBuffer, 0, read);
            } while(true);
    
            return bout.toByteArray();
        }finally {
            is.close();
        }
    }
    
        // reads a string resource
    public String getStringResource(int id, Charset encoding) throws IOException {
        return new String(getResource(id, getContext()), encoding);
    }
    
        // reads an UTF-8 string resource
    public String getStringResource(int id) throws IOException {
        return new String(getResource(id, getContext()), Charset.forName("UTF-8"));
    }
    

    Из действия , добавить

    public byte[] getResource(int id) throws IOException {
            return getResource(id, this);
    }
    

    или из теста , добавьте

    public byte[] getResource(int id) throws IOException {
            return getResource(id, getContext());
    }
    

    И следите за обработкой ошибок - не перехватывайте и не игнорируйте исключения, когда ваши ресурсы должны существовать или что-то есть (очень? ) неправильно.

    ответ дан ThomasRS, с репутацией 7509, 17.01.2013
  • 2 рейтинг

    Это еще один метод, который определенно будет работать, но я не могу заставить его читать несколько текстовых файлов для просмотра в нескольких текстовых представлениях за одно действие, кто-нибудь может помочь?

    TextView helloTxt = (TextView)findViewById(R.id.yourTextView);
        helloTxt.setText(readTxt());
    }
    
    private String readTxt(){
    
     InputStream inputStream = getResources().openRawResource(R.raw.yourTextFile);
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    
     int i;
    try {
    i = inputStream.read();
    while (i != -1)
      {
       byteArrayOutputStream.write(i);
       i = inputStream.read();
      }
      inputStream.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
    e.printStackTrace();
    }
    
     return byteArrayOutputStream.toString();
    }
    
    ответ дан borislemke, с репутацией 3646, 6.01.2012
  • 2 рейтинг

    @borislemke вы можете сделать это так же, как

    TextView  tv ;
    findViewById(R.id.idOfTextView);
    tv.setText(readNewTxt());
    private String readNewTxt(){
    InputStream inputStream = getResources().openRawResource(R.raw.yourNewTextFile);
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    
     int i;
     try {
     i = inputStream.read();
    while (i != -1)
      {
       byteArrayOutputStream.write(i);
       i = inputStream.read();
       }
        inputStream.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
     e.printStackTrace();
     }
    
     return byteArrayOutputStream.toString();
     }
    
    ответ дан Manish Sharma, с репутацией 142, 8.10.2012
  • 1 рейтинг

    Вот смесь решений Weekens и Vovodroid.

    Это более правильно, чем решение Воводроида, и более полно, чем решение Уикенса.

        try {
            InputStream inputStream = res.openRawResource(resId);
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                try {
                    StringBuilder result = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        result.append(line);
                    }
                    return result.toString();
                } finally {
                    reader.close();
                }
            } finally {
                inputStream.close();
            }
        } catch (IOException e) {
            // process exception
        }
    
    ответ дан alcsan, с репутацией 4307, 19.07.2016
  • 1 рейтинг

    1. Сначала создайте папку Directory и назовите ее raw в папке res 2. создать . TXT-файл внутри директории raw, которую вы создали ранее, и дайте ей любое имя, например. статьи. текст. , , , 3. Скопируйте и вставьте текст, который вы хотите внутри. TXT файл, который вы создали "статьи. текст" 4. не забудьте включить текстовое представление в свой основной. XML Основная деятельность. Ява

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gettingtoknowthe_os);
    
        TextView helloTxt = (TextView)findViewById(R.id.gettingtoknowos);
        helloTxt.setText(readTxt());
    
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();//to exclude the ActionBar
    }
    
    private String readTxt() {
    
        //getting the .txt file
        InputStream inputStream = getResources().openRawResource(R.raw.articles);
    
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    
        try {
            int i = inputStream.read();
            while (i != -1) {
                byteArrayOutputStream.write(i);
                i = inputStream.read();
            }
            inputStream.close();
    
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArrayOutputStream.toString();
    }
    

    Надеюсь, это сработало!

    ответ дан Fuser14, с репутацией 9, 18.07.2015
  • 1 рейтинг
    InputStream is=getResources().openRawResource(R.raw.name);
    BufferedReader reader=new BufferedReader(new InputStreamReader(is));
    StringBuffer data=new StringBuffer();
    String line=reader.readLine();
    while(line!=null)
    {
    data.append(line+"\n");
    }
    tvDetails.seTtext(data.toString());
    
    ответ дан sakshi agrawal, с репутацией 19, 30.06.2017