【发布时间】:2018-01-30 14:27:40
【问题描述】:
我在读取应用程序创建的文本文件时遇到问题。我的应用程序生成一个文本文件,其中包含每一行中一个字段的数据,但即使有 BufferedReader 和 StringBuilder 的答案,我也无法在许多组合中很好地处理它。加载按钮应该加载文件的名称(确实如此)并在指定的字段(TextView)中写入数据。为什么它不起作用?一开始我认为这是 StringBuilder 的问题,因为他向我展示了一个错误,即没有从他那里读取数据,所以我让他不再产生这个错误,但仍然没有。
onActivityResult:
@Override
public void onActivityResult(int reqCode, int resCode, Intent Data) {
super.onActivityResult(reqCode, resCode, Data);
if (reqCode == reqGaleria) {
if (resCode == RESULT_OK) {
try {
Uri imageUri = Data.getData();
InputStream imageStream = getContentResolver().openInputStream(imageUri);
Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
ramka.setImageBitmap(selectedImage);
sciezka = imageUri.getPath();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Coś poszło nie tak", LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(getApplicationContext(), "Nie wybrałeś obrazu", LENGTH_SHORT).show();
}
}
if (reqCode == reqLoad) {
if (resCode == RESULT_OK) {
try {
Uri plik = Data.getData();
@SuppressLint("Recycle") Cursor kursor = getContentResolver().query(plik, null, null, null, null);
int nazwa_i = kursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
kursor.moveToFirst();//Musi zostać - bez tego nie wyskoczy nazwa pliku
wczytaj.setText(kursor.getString(nazwa_i));
FileReader test = new FileReader(String.valueOf(wczytaj));
BufferedReader bufor_w = new BufferedReader(test);
String line;
line = bufor_w.readLine();
StringBuilder bob = new StringBuilder(line);
i_e_magazyn.setText(bob);
bob.append('\n');
i_e_strefa.setText(bob);
bufor_w.close();
kursor.close();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),"Problem z uruchamianiem pliku",
LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(), "Nie wybrałeś pliku", LENGTH_SHORT).show();
}
}
}
负责加载的按钮。
b2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/*");
startActivityForResult(intent,reqLoad);
}
});
文件:
Magazyn
Strefa
Rząd
Rama
Słup
Uszkodzenie
Wielkość Uszkodzenia
Lokalizacja
Zielony
Dalsze Działania
Potrzebne Elementy
Typ Elementu
666
/external/images/media/68
最后一行是加载的图片路径
编辑: 问题不仅在于读取文件,还在于读取我选择的文件。 当我指定必须加载的文件时,它会完美加载。当我决定向他展示它必须从哪个文件加载数据时,告诉我该文件不存在。
有效的代码:
testowy.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
File pliczek = Environment.getExternalStorageDirectory();
File plik = new File(pliczek,"/est.txt");
StringBuilder string;
string = new StringBuilder();
try{
BufferedReader reader = new BufferedReader(new FileReader(plik));
String linia;
int licz = 0;
while((linia = reader.readLine())!=null){
switch(licz) {
case 0:
string.append(linia);
i_e_magazyn.setText(linia);
string.append('\n');
break;
case 1:
string.append(linia);
i_e_strefa.setText(linia);
string.append('\n');
break;
case 2:
string.append(linia);
i_e_rzad.setText(linia);
string.append('\n');
break;
case 3:
string.append(linia);
i_e_rama.setText(linia);
string.append('\n');
break;
case 4:
string.append(linia);
i_e_slup.setText(linia);
string.append('\n');
break;
case 5:
string.append(linia);
i_e_uszk.setText(linia);
string.append('\n');
break;
case 6:
string.append(linia);
i_e_w_uszk.setText(linia);
string.append('\n');
break;
case 7:
string.append(linia);
i_e_lok.setText(linia);
string.append('\n');
break;
case 8:
string.append(linia);
i_e_klasa.setText(linia);
string.append('\n');
break;
case 9:
string.append(linia);
i_e_dal_dzial.setText(linia);
string.append('\n');
break;
case 10:
string.append(linia);
i_e_pot_elem.setText(linia);
string.append('\n');
break;
case 11:
string.append(linia);
i_e_typ.setText(linia);
string.append('\n');
break;
case 12:
string.append(linia);
i_e_ilosc.setText(linia);
string.append('\n');
break;
case 13:
string.append(linia);
wczytaj.setText(linia);
string.append('\n');
break;
}
licz++;
}
} catch(FileNotFoundException e){
Toast.makeText(getApplicationContext(),"Nie ma takiego pliku",LENGTH_SHORT)
.show();
} catch(IOException e){
Toast.makeText(getApplicationContext(),"Nie zczytano pliku",LENGTH_SHORT).show();
}
}
});
适用于选择文件的代码:
if (reqCode == reqLoad) {
if (resCode == RESULT_OK) {
Uri wskaznik = data.getData();
assert wskaznik != null;
//FileReader test = new FileReader(Data.getData().toString());
edytuj.setText(String.valueOf(wskaznik));
File pliczek = Environment.getExternalStorageDirectory();
File plik = new File(String.valueOf(wskaznik));
StringBuilder string;
string = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new FileReader(plik));
String linia;
int licz = 0;
while ((linia = reader.readLine()) != null) {
switch (licz) {
case 0:
string.append(linia);
i_e_magazyn.setText(linia);
string.append('\n');
break;
case 1:
string.append(linia);
i_e_strefa.setText(linia);
string.append('\n');
break;
case 2:
string.append(linia);
i_e_rzad.setText(linia);
string.append('\n');
break;
case 3:
string.append(linia);
i_e_rama.setText(linia);
string.append('\n');
break;
case 4:
string.append(linia);
i_e_slup.setText(linia);
string.append('\n');
break;
case 5:
string.append(linia);
i_e_uszk.setText(linia);
string.append('\n');
break;
case 6:
string.append(linia);
i_e_w_uszk.setText(linia);
string.append('\n');
break;
case 7:
string.append(linia);
i_e_lok.setText(linia);
string.append('\n');
break;
case 8:
string.append(linia);
i_e_klasa.setText(linia);
string.append('\n');
break;
case 9:
string.append(linia);
i_e_dal_dzial.setText(linia);
string.append('\n');
break;
case 10:
string.append(linia);
i_e_pot_elem.setText(linia);
string.append('\n');
break;
case 11:
string.append(linia);
i_e_typ.setText(linia);
string.append('\n');
break;
case 12:
string.append(linia);
i_e_ilosc.setText(linia);
string.append('\n');
break;
case 13:
string.append(linia);
wczytaj.setText(linia);
string.append('\n');
break;
}
licz++;
}
} catch (FileNotFoundException e) {
Toast.makeText(getApplicationContext(), "Nie ma takiego pliku",
LENGTH_SHORT)
.show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Nie zczytano pliku", LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(getApplicationContext(), "Nie wybrałeś pliku", LENGTH_SHORT).show();
}
}
【问题讨论】:
-
可以发布输入文件吗?可能出错的一件事是您说“我的应用程序生成一个文本文件,其中包含每一行中的一个字段的数据”,但您只使用
BufferedReader执行一个readLine()。我假设您需要阅读的不仅仅是一行,但如果没有看到您的输入,我无法确定。 -
@FrancisBartkowiak 不应该加载我定义的数据并在我定义关闭时关闭吗?
-
是的。但是你只定义它来加载一行。如果您的输入文件中有多行(即 L1、L2、L3、...、LN),那么您只是在读取 L1。您的所有
StringBuilder所做的就是将第一行添加到其中,然后添加一个换行符(“\n”)。我假设你真正想要做的是获取文件中的每一行并对每一行做一些事情。同样,如果没有看到您的意见,我无法确定。 -
FileReader test = new FileReader(String.valueOf(wczytaj));。更改为FileReader test = new FileReader(Data.getData());。并删除光标的东西。 -
@greenapps 无法解析构造函数'FileReader(android.net.Uri)' :(
标签: java android bufferedreader filereader stringbuilder