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