我有一个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)
答案 0 :(得分:3)
如果方案为要使用该文件,请执行以下操作:
getPath()
,则 Uri
仅对file
有意义。您的方案是content
。
替换:
File file = new File(txtPublicKeyPath.getText().toString());
FileInputStream fis = new FileInputStream(file);
使用:
InputStream fis = getContentResolver().openInputStream(uri);
作为奖励,替换适用于file
和content
计划。