首页 > 解决方案 > 如何将仅存在于内存中的对象文件存储为存储系统内部的文件?

问题描述

我的程序刚刚收到一个Object,它是File的实例。如何将所述对象保存为文件?我希望文件以人类可读的格式存储,这就是为什么只将对象写入像这里这样的新文件不会成功的原因。

我也不能像这里一样复制文件,因为我已经知道的文件只存在于内存中,因此如果我将它设置为源,它将不会被识别。

标签: javafile

解决方案


java.io.File对象不代表文件。它实际代表的是文件系统路径名;即文件系统中可能存在或不存在的对象的名称。

因此,您的程序根本没有“接收”文件,您可以对收到的对象执行的唯一操作是保存路径名,或尝试复制路径名表示(或可能表示)的文件。后者仅在路径名在应用程序的本地文件系统名称空间中有效并且它表示真实文件(或文件的符号链接)时才有效。

我也不能像这里一样复制文件,因为我已经知道的文件只存在于内存中。

那没有意义。AFile不能表示仅存在于内存中的文件(无论您的意思是什么)。如果File::exists()返回true,则文件在文件系统中。如果它返回false,则File根本不表示可访问文件:它不在磁盘上,也不在内存中。


一些操作系统支持所谓的“ram 文件系统”,其中系统的物理或虚拟内存用于存储文件。但是这样一个文件中的文件可以像普通文件一样被复制。


Java 7 及更高版本允许您使用java.nio.file.FileSystem. 但是File不适用于这种方法。您java.nio.file.Path改为使用对象。


现在,您实际上可能要说的是,File表示存在于另一台机器上的文件……这就是您无法复制它的原因。如果这是问题所在,也没有简单的解决方案。一台机器不能只是“伸出”并读取另一台机器硬盘上的任意文件。如果这是您的问题,您将需要设置远程文件系统挂载,或使用文件传输机制。


推荐阅读