Чтение текстового файла и вывод в виде TextView в Android
Я пытаюсь прочитать текстовый файл, который уже сохранен в моем каталоге, и распечатать его на экране как TextView. Это код, который у меня есть до сих пор. Однако, когда я запускаю приложение, оно создает тост с надписью "Ошибка чтения файла". Что я здесь не так делаю?
public class sub extends Activity {
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text);
//text = (TextView) findViewById(R.id.summtext);
//File file = new File("inputNews.txt");
//StringBuilder text = new StringBuilder();
try {
InputStream in = openFileInput("inputNews.txt");
if(in != null){
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
StringBuilder text = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
in.close();
}
}
catch (IOException e) {
Toast.makeText(getApplicationContext(),"Error reading file!",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
TextView output= (TextView) findViewById(R.id.summtext);
output.setText((CharSequence) text);
}
}
4 ответа
Если вы хотите сохранить .txt
файл в вашем проекте, вы должны найти его в assets
папка.
Затем вы можете получить к нему доступ с помощью AssetManger.
Прочтите эту тему о том, как создать свой assets
папку, а затем используйте этот код:
public class subActivity extends Activity {
private TextView textView;
private StringBuilder text = new StringBuilder();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text);
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("inputNews.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
text.append(mLine);
text.append('\n');
}
} catch (IOException e) {
Toast.makeText(getApplicationContext(),"Error reading file!",Toast.LENGTH_LONG).show();
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
TextView output= (TextView) findViewById(R.id.summtext);
output.setText((CharSequence) text);
}
}
Вы должны хранить эти файлы в assets
или же raw
каталог.
И после этого вы можете получить входные данные из этих файлов, используя,
При использовании активов
AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");
ИЛИ если вы используете сырой каталог, то
InputStream is = getResources().openRawResource(R.raw.test);
Это версия ответа Kotlin сверху:
var text = ""
var reader: BufferedReader? = null
try {
reader = BufferedReader(InputStreamReader(assets.open("inputNews.txt")))
text = reader.readLines().joinToString("\n")
} catch (e: IOException) {
Toast.makeText(applicationContext, "Error reading license file!", Toast.LENGTH_SHORT).show()
e.printStackTrace()
} finally {
try {
reader?.close()
} catch (e: IOException) {
//log the exception
e.printStackTrace()
}
textView.text = text
}
Насколько я знаю, вы не можете прочитать файл из так называемого development folder
, Но вы можете переместить тот же файл в папку активов в development folder
и читать оттуда. то есть.
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(getAssets().open("inputNews.txt")));
StringBuilder text = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
text.append(line);
text.append('\n');
}
} catch (IOException e) {
Toast.makeText(getApplicationContext(),"Error reading file!",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Я надеюсь, что это помогает