【发布时间】:2020-01-09 13:49:04
【问题描述】:
我的程序刚刚收到一个 Object,它是 File 的实例。如何将所述对象保存为文件? 我希望文件以人类可读的格式存储,这就是为什么将对象写入像here 这样的新文件不会成功的原因。
我也不能像here这样复制文件,因为我已经知道的文件只存在于内存中,因此如果我将它设置为源,它将不会被识别。
【问题讨论】:
我的程序刚刚收到一个 Object,它是 File 的实例。如何将所述对象保存为文件? 我希望文件以人类可读的格式存储,这就是为什么将对象写入像here 这样的新文件不会成功的原因。
我也不能像here这样复制文件,因为我已经知道的文件只存在于内存中,因此如果我将它设置为源,它将不会被识别。
【问题讨论】:
java.io.File 对象不代表文件。它实际代表的是文件系统路径名;即文件系统中对象的名称可能存在也可能不存在。
所以你的程序根本没有“接收”一个文件,你可以对你收到的对象做的唯一事情就是保存路径名,或者尝试复制文件路径名表示(或可能表示)。后者仅在路径名在应用程序的本地文件系统命名空间中有效且它表示真实文件(或文件的符号链接)时才有效。
我也不能像这里一样只复制文件,因为我已经知道的文件只存在于内存中。
这没有意义。 File 不能表示仅存在于内存中的文件(无论您是什么意思)。如果File::exists() 返回true,则文件在文件系统中。如果它返回false,则File 根本不表示可访问文件:它不在磁盘上,也不在内存中。
某些操作系统支持所谓的“ram 文件系统”,其中系统的物理或虚拟内存用于存储文件。但是这样一个文件中的文件可以像普通文件一样复制。
Java 7 及更高版本允许您使用java.nio.file.FileSystem 的子类定义自己的内存中“虚拟”文件系统。但是File 不适用于这种方法。你改用java.nio.file.Path 对象。
现在您可能实际上想说的是File 表示一个文件存在于另一台机器上 ...这就是您无法复制它的原因。如果这是问题所在,也没有简单的解决方案。一台机器不能只是“伸出”并读取另一台机器硬盘上的任意文件。如果这是您的问题,您将需要设置远程文件系统挂载,或使用文件传输机制。
【讨论】: