【问题标题】:How to evaluate size of file in Java before creating it?如何在创建文件之前在 Java 中评估文件的大小?
【发布时间】:2015-01-05 17:30:17
【问题描述】:

在我的 Java 程序中,我需要创建文件并在其中写入可以通过 Inputstream 的 read() 方法获得的内容。在创建文件之前如何评估文件的大小?

【问题讨论】:

  • 为什么不用OutputStream的write()来写呢?
  • 为什么需要知道文件的大小?
  • 你一般不能。想象一下输入流连接到网络套接字,或/dev/urandom - 它们是“无限的”。请说明您的用例和实际问题,您的问题无法回答。
  • 您可以通过检查要写入文件的字符数(长度)来评估大小。
  • 如果可以的话会有什么不同?您不能在 Java 中预先扩展文件。你的问题仍然模糊不清。

标签: java file size inputstream


【解决方案1】:

通常,您不需要知道文件有多大,但如果您真的知道:

你能做到这一点的唯一方法是先将InputStream的内容完全读入内存,然后看看你有多少。

对于如何将其全部读入内存,您有多种选择,其中之一可能是将其写入ByteArrayOutputStream。 (然后,当然,准备好后将其写入文件。)

但同样,流的伟大之处在于您不必必须将所有内容读入内存;如果您可以避免需要提前知道尺寸,那将是最好的。

还要注意,文件在磁盘上占用的空间不会与文件大小完全相同;大多数文件系统以块(4k、8k、16k、32k)的形式工作,因此在使用 8k 块的文件系统上(例如)12k 的文件实际上将占用 16k 的空间。

【讨论】:

    【解决方案2】:

    这取决于使用的编码,但您可以将其写入内存流并获取长度。

    【讨论】:

    • 什么编码?什么内存流?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多