从 Android 上的设备获取文件,尝试使用时一直提示未找到文件
Getting file from device on Android, keeps stating file not found when trying to use it
我有一个 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)
To use the file I do the following:
如果方案是 file
,getPath()
仅对 Uri
有意义。你的方案是 content
.
替换:
File file = new File(txtPublicKeyPath.getText().toString());
FileInputStream fis = new FileInputStream(file);
与:
InputStream fis = getContentResolver().openInputStream(uri);
作为奖励,替换适用于 file
和 content
方案。
我有一个 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)
如果方案是To use the file I do the following:
file
,getPath()
仅对 Uri
有意义。你的方案是 content
.
替换:
File file = new File(txtPublicKeyPath.getText().toString());
FileInputStream fis = new FileInputStream(file);
与:
InputStream fis = getContentResolver().openInputStream(uri);
作为奖励,替换适用于 file
和 content
方案。