Java 如何存储文件字节,然后再创建该文件?

Java 如何存储文件字节,然后再创建该文件?,java,android,file,Java,Android,File,因此,基本上,我正在创建一个android应用程序,其中我将文件内容存储在服务器节点中。通过使用ByteArrayOutputStream获取所选文件的字节内容,如下所示: static byte[] convertToBytes(Object object) { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(

因此,基本上,我正在创建一个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()函数获取数据

例如,这是一个文件的字节数组(压缩后,真实长度超过15000):

[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;
    }
}
我的问题是如何在android设备中打开该文件。我会吗 必须下载文件,将其存储在设备内部,然后 打开它?或者我可以从我的应用程序内存或我的 如果没有,有没有更好的方法来获取服务器的原始内容 文件,然后在另一个电话设备中创建新文件 只使用那些原始内容

如果任何人想要任何澄清,他们可以告诉我,我会尽我所能发布尽可能多的信息。提前谢谢


澄清:我的文件到字节压缩和字节到文件压缩功能工作正常,这不是问题所在。问题在于如何使用这些字节,并能够使用它们在其他设备中创建相同的文件。

通过此链接,您可以阅读有关访问文件、读和写的所有内容

这是链接中关于如何写入文件的示例

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();
}

您的数据作为ByteArray在服务器上,您可以让服务器在网络视图中显示数据,您可以下载数据并在设备上使用它们,或者您可以使用应用程序下载数据并在应用程序中显示它们。我想用设备的默认应用程序打开文件,而不仅仅是显示它们。这就是我对您的理解:)但是我如何在我的应用程序中显示文件,因为我不想显示数据,但想打开文件(已注释)?@DominikWuttke顺便说一句,我已经有了数据。甚至已经将其转换为java.io.file对象。当你有了文件对象后,你可以用filestreamwriter将其保存在你的设备上,并使用意图让Android决定哪个应用程序可以打开此类文件。你能发布代码或给我一个链接,我可以在那里找到这样的函数吗非常有帮助。文件存储在您保存它的地方,您必须定义一个路径,但您可以将其保存在只有您的应用程序才能访问的内部存储中。它不再工作了,或者您为什么不接受它?您要查找的是文件。readAllBytes()从文件中获取bytearray。此链接中的第2点应该可以解决您的问题嘿,看看我。我刚刚为此创建了一个项目。非常感谢:)