Я пытаюсь извлечь файл (любой тип) из файлового менеджера и закодировать этот файл в String Base64. Я нашел много ответов с участием ИЗОБРАЖЕНИЙ, но мне нужен любой тип файла. Он то, что я делаю.FileInputStream (file) return ENOENT (Нет такого файла или каталога) android
Я извлечения файла (любого типа) из галереи как этот
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Choose file"), GALLERY_REQUEST_CODE);
И в моем результате
Uri returnUri = intent.getData();
Что дает мне «содержание: //com.android.providers. downloads.documents/документ/1646'
Тогда я пытаюсь
File file = new File(returnUri.getPath());
До сих пор так хорошо, но я стараюсь, чтобы закодировать файл в строку Base64:
String str = null;
try {
str = convertFile(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
и метод convertFile
public String convertFile(File file)
throws IOException {
byte[] bytes = loadFile(file);
byte[] encoded = Base64.encode(bytes, Base64.DEFAULT);
String encodedString = new String(encoded);
return encodedString;
}
и метод LoadFile
private static byte[] loadFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
Log.i("MobileReport","Anexo -> loadfile(): File is too big!");
// File is too large
}
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("It was not possible to read the entire file "+file.getName());
}
is.close();
return bytes;
}
The ошибка находится в первой строке метода «loadFile»
InputStream is = new FileInputStream(file);
В приложение падает и в журнале я получил:
java.io.FileNotFoundException: /document/1646: open failed: ENOENT (No such file or directory)
Я Объявленные разрешения читать и писать. Может ли кто-нибудь помочь мне с этой ошибкой? Спасибо!
Спасибо за помощь. Я пробовал 'getContentResolver(). OpenInputStream (returnUri)' получил файл не найден. –
@HeitorColangelo: Если вы печатаете 'toString()' из 'returnUri' в LogCat, как это выглядит? – CommonsWare
content: //com.android.providers.downloads.documents/document/1646 –