在Android Java的文件选择器中选择并显示.txt文件中的文本
我已经在ListActivity中创建了一个文件选择器,它列出并允许您在我的设备内部存储器的TravelLogs目录中选择一个文件 目标是: 我希望在TextView中显示从文件选择器中选择的.txt文件中的文本,在activity_list.xml文件中显示dispText中的文本 有什么建议或资源吗?我已经阅读了关于这个主题的每一篇教程,一定是误解了 更新至截至太平洋标准时间11月27日中午12时26分的最新代码在Android Java的文件选择器中选择并显示.txt文件中的文本,java,android,Java,Android,我已经在ListActivity中创建了一个文件选择器,它列出并允许您在我的设备内部存储器的TravelLogs目录中选择一个文件 目标是: 我希望在TextView中显示从文件选择器中选择的.txt文件中的文本,在activity_list.xml文件中显示dispText中的文本 有什么建议或资源吗?我已经阅读了关于这个主题的每一篇教程,一定是误解了 更新至截至太平洋标准时间11月27日中午12时26分的最新代码 public class ListActivity extends AppCo
public class ListActivity extends AppCompatActivity {
TextView dispText;
Button buttonOpenDialog;
TextView textFolder;
String KEY_TEXTPSS = "TEXTPSS";
static final int CUSTOM_DIALOG_ID = 0;
ListView dialog_ListView;
File root;
File curFolder;
private List<String> fileList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
buttonOpenDialog = (Button) findViewById(R.id.opendialog);
buttonOpenDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(CUSTOM_DIALOG_ID);
}
});
root = new File(Environment.getExternalStorageDirectory(), "TravelLogs");
curFolder = root;
dispText = (TextView) findViewById(R.id.text_file_data);
}
public String getTextFileData(String fileName) {
StringBuilder text = new StringBuilder();
Log.d("jason", "fileName: " + fileName );
try {
FileInputStream fIS = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(fIS, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
text.append(line + '\n');
}
br.close();
} catch (IOException e) {
text.append("IOException: " + e.getMessage() + "\n");
Log.e("Error!", "Error occured while reading text file from Internal Storage!");
}
return text.toString();
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch (id) {
case CUSTOM_DIALOG_ID:
dialog = new Dialog(ListActivity.this);
dialog.setContentView(R.layout.dialoglayout);
dialog.setTitle("Select Log");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
textFolder = (TextView) dialog.findViewById(R.id.folder);
dialog_ListView = (ListView) dialog.findViewById(R.id.dialoglist);
dialog_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("jason", "fileName: " + fileName );
File selected = new File(fileList.get(position));
if(selected.isDirectory()) {
ListDir(selected);
} else {
Toast.makeText(ListActivity.this, selected.toString() + " selected",
Toast.LENGTH_LONG).show();
dismissDialog(CUSTOM_DIALOG_ID);
String text = getTextFileData(selected.getAbsolutePath());
Toast.makeText(ListActivity.this, text.toString() + " line",
Toast.LENGTH_LONG).show();
}
}
});
break;
}
return dialog;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
switch (id) {
case CUSTOM_DIALOG_ID:
ListDir(curFolder);
break;
}
}
void ListDir(File f) {
curFolder = f;
textFolder.setText(f.getPath());
File[] files = f.listFiles();
fileList.clear();
for(File file : files) {
fileList.add(file.getPath());
}
ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, fileList);
dialog_ListView.setAdapter(directoryList);
}
@Override
public void onBackPressed()
{
super.onBackPressed();
startActivity(new Intent(ListActivity.this, MainActivity.class));
finish();
}
@Override
public boolean onSupportNavigateUp(){
startActivity(new Intent(ListActivity.this, MainActivity.class));
finish();
return true;
}
}
公共类ListActivity扩展了AppCompatActivity{
文本视图显示文本;
按钮本对话框;
文本视图文本文件夹;
字符串键_TEXTPSS=“TEXTPSS”;
静态最终整型自定义对话框ID=0;
ListView对话框\u ListView;
文件根目录;
文件夹;
private List fileList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_列表);
ButtonPendialog=(Button)findViewById(R.id.opendialog);
ButtonnoPendialog.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
showDialog(自定义对话框ID);
}
});
root=新文件(Environment.getExternalStorageDirectory(),“TravelLogs”);
curFolder=root;
dispText=(TextView)findViewById(R.id.text\u文件\u数据);
}
公共字符串getTextFileData(字符串文件名){
StringBuilder text=新的StringBuilder();
Log.d(“jason”,“文件名:”+fileName);
试一试{
FileInputStream fIS=新的FileInputStream(文件名);
InputStreamReader isr=新的InputStreamReader(fIS,“UTF-8”);
BufferedReader br=新的BufferedReader(isr);
弦线;
而((line=br.readLine())!=null){
text.append(第+'\n'行);
}
br.close();
}捕获(IOE异常){
text.append(“IOException:+e.getMessage()+”\n”);
Log.e(“Error!”,“从内部存储器读取文本文件时出错!”);
}
返回text.toString();
}
@凌驾
受保护的对话框onCreateDialog(int id){
Dialog=null;
开关(id){
案例自定义对话框\u ID:
dialog=新建对话框(ListActivity.this);
setContentView(R.layout.dialoglayout);
对话框.setTitle(“选择日志”);
对话框。可设置可取消(true);
对话框。setCanceledOnTouchOutside(true);
textFolder=(TextView)dialog.findViewById(R.id.folder);
dialog_ListView=(ListView)dialog.findviewbyd(R.id.dialoglist);
dialog_ListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.d(“jason”,“文件名:”+fileName);
所选文件=新文件(fileList.get(position));
if(selected.isDirectory()){
ListDir(选定);
}否则{
Toast.makeText(ListActivity.this,selected.toString()+“selected”,
Toast.LENGTH_LONG).show();
dismissDialog(自定义对话框ID);
String text=getTextFileData(selected.getAbsolutePath());
Toast.makeText(ListActivity.this,text.toString()+“line”,
Toast.LENGTH_LONG).show();
}
}
});
打破
}
返回对话框;
}
@凌驾
受保护的void onPrepareDialog(int id,对话框){
super.onPrepareDialog(id,对话框);
开关(id){
案例自定义对话框\u ID:
ListDir(curFolder);
打破
}
}
void ListDir(文件f){
curFolder=f;
textFolder.setText(f.getPath());
File[]files=f.listFiles();
fileList.clear();
用于(文件:文件){
添加(file.getPath());
}
ArrayAdapter目录列表=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,fileList);
对话框\u ListView.setAdapter(目录列表);
}
@凌驾
public void onBackPressed()
{
super.onBackPressed();
startActivity(新意图(ListActivity.this、MainActivity.class));
完成();
}
@凌驾
公共布尔onSupportNavigateUp(){
startActivity(新意图(ListActivity.this、MainActivity.class));
完成();
返回true;
}
}
改为
FileInputStream fIS = new FileInputStream(fileName);
另外,我认为这个问题解决了。
如需更多详细问题,请另发帖子解决。问题出在哪里?
只需查看所选文本的文本即可
。所选文本或所选文件?那么用户可以选择一个文件吗?你应该告诉我发生了什么。什么事情不会发生。所以你的对话出现了。那么用户看到了什么?我想没有显示任何文件。文件列表和列表视图为空。Toast.makeText(ListActivity.this,selected.toString()+“selected”,Toast.LENGTH_LONG).show()代码>这个吐司()会出现吗?如果是,用户看到了什么?Log.d(“jason”,“fileName:”+fileName)代码>。请在该函数中放置第一个语句。告诉我们记录了什么。在catch块中添加text.append(“IOException:”+e.getMessage()+“\n”)代码>。再次感谢您的帮助
FileInputStream fIS = new FileInputStream(fileName);