从Android上的设备获取文件,在尝试使用它时不断声明找不到文件



>我有一个Android应用程序,我允许用户从文件系统中选择一个文件,然后我获取路径并将路径设置为EditText,然后使用此路径打开文件内容。

以下是我加载文件选择器的方式

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select your private key"), PRIVATE_KEY_PICKER);

以下是我onActivityResult

        protected void onActivityResult(int requestCode, int resultCode, Intent data)
            {
                switch (requestCode)
                {
                    case PRIVATE_KEY_PICKER:
                        if (resultCode == Activity.RESULT_OK)
                        {
                            Uri uri = data.getData();
                            String path = uri.getPath();
                            txtPublicKeyPath.setText(path);
                        }
                        break;
                }
            }
    The path that I get back and set to the EditText is:
    `/document/primary:Download/my_file.txt` (my_file.txt being the file that was selected in the file picker).
    To use the file I do the following:
    File file = new File(txtPublicKeyPath.getText().toString());
                FileInputStream fis = new FileInputStream(file);
                BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "n");
                }
                Intent intent = new Intent();
                intent.putExtra(PUBLIC_KEY_FILE, sb.toString());
                //If the certiticate passphrease has been provided, add this to the bundle
                if (txtPassphrase.getText().length() > 0)
                {
                    intent.putExtra(PUBLIC_KEY_PASSPHRASE, txtPassphrase.getText().toString());
                }
                setResult(Activity.RESULT_OK, intent);
                finish();
}

上面的代码会导致以下异常:

04-10 21:46:58.680 28866-28866/com.BoardiesITSolutions.MysqlManager E/SSHKeyManager: java.io.FileNotFoundException: /document/primary:Download/id_rsa (No such file or directory)

要使用该文件,我执行以下操作:

getPath()只有在方案file的情况下,才对Uri有意义。您的计划content.

取代:

            File file = new File(txtPublicKeyPath.getText().toString());
            FileInputStream fis = new FileInputStream(file);

跟:

            InputStream fis = getContentResolver().openInputStream(uri);

作为奖励,替换适用于filecontent方案。

最新更新