Android чтение текстового файла ресурсов raw



все просто, но не работает так, как предполагалось.



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





b) если применимое право требует каких-либо гарантий в отношении
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ВСЕ ТАКИЕ ГАРАНТИИ ЯВЛЯЮТСЯ
ОГРАНИЧЕННЫЙ В ПРОДОЛЖИТЕЛЬНОСТИ ДО ДЕВЯНОСТА (90)
ДНИ ОТ ДАТЫ ПОСТАВКИ.




c) отсутствие устной или письменной информации или
СОВЕТЫ ПО ВИРТУАЛЬНОМУ ОРИЕНТИРОВАНИЮ,
СВОЙ ДИЛЕРЫ, ДИСТРИБЬЮТОРЫ, АГЕНТЫ ИЛИ
СОТРУДНИКИ ДОЛЖНЫ СОЗДАТЬ ГАРАНТИЮ ИЛИ
В ЛЮБОМ СЛУЧАЕ УВЕЛИЧЬТЕ ОБЪЕМ ЛЮБОГО
ГАРАНТИИ, ПРЕДУСМОТРЕННЫЕ В ЭТОМ ДОКУМЕНТЕ.



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




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



<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1.0"
android:layout_below="@+id/logoLayout"
android:background="@drawable/list_background">

<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView android:id="@+id/txtRawResource"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="3dip"/>
</ScrollView>

</LinearLayout>


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



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's показал, но после каждой строки я получаю странный символ [] как я могу удалить этот символ ? Я думаю, что это новая линия.



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



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

9 ответов:

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

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

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

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

    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.");
    }

Если вы используете 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:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

Gradle:

'commons-io:commons-io:2.4'

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

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

или

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

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 вы можете сделать это подобным образом, как

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

здесь идет сочетание и решения выходные по Vovodroid по.

это более правильно, чем решение Vovodroid и более полное, чем решение weekens.

    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
    }

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

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

надеюсь, что это работает!

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

Comments

    Ничего не найдено.