Итак, в основном я создаю приложение для Android, в котором я храню содержимое файла на узле сервера. Используя ByteArrayOutputStream
, чтобы получить байтовое содержимое выбранного файла следующим образом:
static byte[] convertToBytes(Object object) {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos)) {
out.writeObject(object);
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
Параметр объекта — это место, куда будет передаваться файл. Получение файла — это простой процесс, который заключается в создании намерения и получении данных из функции onActivityResult()
.
Теперь, например, это (сжатый, истинная длина более 15 000) байтовый массив файла:
[120, -100, 91, -13, -106, -127, -75, -72, -120, -127, 39, 43, -79, 44, 81, 47, 51, 95, -49, 45, 51, 39, -107, 69, 119, -119, 43, 31, -17, -109, -1, -52, 12, -116, 62, 12, 44, 5, -119, 37, 25, 37, 12, 66, 62, 32, 21, -6, 57, -119, 121, -23, -6, -63, 37, 69, -103, 121, -23, -42, 21, 5, 37, 12, -22, -6, 41, -7, -55, -91, -71, -87, 121, 37, -6, 46, -82, 78, 70, -70, -122, 46, 6, -82, 86, 5, -119, -107, 32, 17, -35, -94, -44, -28, -44, -52, -126, 18, -67, -126, -108, -76, 114, 38, 6, -3, 10, 0, 122, -76, 35, 82]
У меня даже есть функция для преобразования этого набора байтов в файловый объект, например:
static Object convertFromBytes(byte[] bytes) {
try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInput in = new ObjectInputStream(bis)) {
return in.readObject();
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
My question is how to open that file in the android device. Will I have to download the file, store it in the device internally and then open it? Or can I open it just like that from my app memory or my server. If not, is there a better way to get the raw contents of a file, and then have a method to create a new file in another phone device by using only those raw contents?
Если кому-то нужны какие-либо разъяснения, они могут сказать мне, и я сделаю все возможное, чтобы опубликовать как можно больше информации. Заранее спасибо!
Уточнение: Мои функции сжатия файла в байт и сжатия байта в файл работают правильно, и проблема не в этом. Проблема заключается в использовании этих байтов и возможности использовать их для создания таких же файлов на других устройствах.
Я хочу открыть файл с помощью стандартного приложения устройства, а не просто показать их. Вот как я вас понял :) Но как я могу показать файл внутри своего приложения, так как я хочу не показывать данные, а открывать файл (уже замеченный)?
@DominikWuttke Кстати, у меня уже есть данные. И даже преобразовали его в объект java.io.file.
Когда у вас есть файловый объект, вы можете сохранить его на своем устройстве с помощью файлового потока и использовать намерение, чтобы позволить Android решить, какое приложение может открыть этот тип файла.
Не могли бы вы опубликовать код или дать мне ссылку, где я могу найти такую функцию? Будет большим подспорьем.
По этой ссылке вы можете прочитать все о доступе к файлам, чтении и записи.
https://developer.android.com/training/data-storage/files#java
это пример из ссылки о том, как записать в файл
String filename = "myfile";
String fileContents = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(fileContents.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Файл хранится там, где вы его сохраняете, вам нужно определить путь, но вы можете сохранить его во внутреннем хранилище, доступном только вашему приложению.
Это больше не работает, или почему вы не принимаете это?
То, что вы ищете, это Files.readAllBytes(), чтобы получить массив байтов из файла.
Пункт 2 в этой ссылке должен решить вашу проблему Howtodoinjava.com/java/io/…
Эй, посмотри на меня. Я только что создал проект из-за этого. Большое тебе спасибо :)
Ваши данные находятся на сервере в виде ByteArray, вы можете заставить сервер отображать данные в веб-просмотре, вы можете загружать данные и использовать их на своем устройстве, или вы можете использовать свое приложение для загрузки данных и отображения их внутри вашего приложения.