Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Java的文件选择器中选择并显示.txt文件中的文本_Java_Android - Fatal编程技术网

在Android Java的文件选择器中选择并显示.txt文件中的文本

在Android Java的文件选择器中选择并显示.txt文件中的文本,java,android,Java,Android,我已经在ListActivity中创建了一个文件选择器,它列出并允许您在我的设备内部存储器的TravelLogs目录中选择一个文件 目标是: 我希望在TextView中显示从文件选择器中选择的.txt文件中的文本,在activity_list.xml文件中显示dispText中的文本 有什么建议或资源吗?我已经阅读了关于这个主题的每一篇教程,一定是误解了 更新至截至太平洋标准时间11月27日中午12时26分的最新代码 public class ListActivity extends AppCo

我已经在ListActivity中创建了一个文件选择器,它列出并允许您在我的设备内部存储器的TravelLogs目录中选择一个文件

目标是: 我希望在TextView中显示从文件选择器中选择的.txt文件中的文本,在activity_list.xml文件中显示dispText中的文本

有什么建议或资源吗?我已经阅读了关于这个主题的每一篇教程,一定是误解了

更新至截至太平洋标准时间11月27日中午12时26分的最新代码

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