java - Android - 使用 Intent 从手机内存中打开文件

标签 java android bufferedreader

我正在开发一个应用程序,该应用程序将手机中的 .txt 文件作为输入并将其打印在 TextView 上,

public class MainActivity extends AppCompatActivity {
Button button;
Intent intent;private StringBuilder text = new StringBuilder();



private InputStream getResources(String s) {
    return null;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.btn);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("text/plain");
            startActivityForResult(intent, 7);
            Log.v("###", "parent "  + getParent());
        }

    });
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String Fpath = data.getDataString();
  //  final String fileName = ""+Fpath;
    Log.v("###", "yo " +Fpath);

    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case 7:

            if (resultCode == RESULT_OK) {
                setContentView(R.layout.activity_main);


                Log.v("###", "hellow");
                setContentView(R.layout.activity_main);
                BufferedReader reader = null;

                try {

                    reader = new BufferedReader(

             new InputStreamReader(getAssets().open("filename.txt")));
                    //change code
                    // do reading
                    String mLine;
                    while ((mLine = reader.readLine()) != null) {
                        text.append(mLine);
                        text.append('\n');
                    }
                } catch (IOException e) {
                    String PathHolder = data.getData().getPath();
                    Toast.makeText(MainActivity.this, PathHolder, 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.Txt);
                    output.setText((CharSequence) text);

                }
            }
    }
}
}

一切都很好,但线路

new InputStreamReader(getAssets().open("filename.txt")));

从 Assets 文件夹中获取文件, 帮我从我的手机中获取文件,

Assets 文件夹中的文件正确打开,但我希望从我的手机中选择它

最佳答案

您可以在onActivityResult中获取您从文件管理器中选择的文件路径。

 Uri PathHolder = data.getData();

更新

上面的行给出了您从存储中选择的文件的uri。然后你就可以轻松地从该 Uri 获取文件。

刚刚忘记了getAssets使用以下方法从文件中读取。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri PathHolder = data.getData();
    FileInputStream fileInputStream = null;
    StringBuilder text = new StringBuilder();
    try {
        InputStream inputStream = getContentResolver().openInputStream(PathHolder);
        BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
        String mLine;
        while ((mLine = r.readLine()) != null) {
            text.append(mLine);
            text.append('\n');
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

关于java - Android - 使用 Intent 从手机内存中打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713245/

相关文章:

java - JSF 方面在 Eclipse 中不可用

java - 改变屏幕尺寸

android - SwipeRefreshLayout - 向下滑动刷新但不移动 View 下拉

java - 我可以在 Vert.x HTTP 请求队列上设置容量吗?

java - FileSizeLimitExceededException 导致错误 500 而不是 413

android - 移动设备上的按钮动态填充/高度问题

java - 当我删除应用程序时,未调用 onReceive 方法,并且我以正确的方式编写代码

java - 如何拆分文本文件中的每条数据并将它们放回 Java GUI 表单上各自的文本字段中?

java - 带有 BufferedReader 的线程 "Thread-1"java.lang.NullPointerException 中的异常

java - 独立的Java控制台输入法?