在 Java 中确定和打印文件大小

Posted

技术标签:

【中文标题】在 Java 中确定和打印文件大小【英文标题】:Determining and printing file size in Java 【发布时间】:2011-07-05 20:06:08 【问题描述】:

下面的方法返回文件大小为 2。由于它很长,我假设 java 计算的文件大小是 2*64 位。但实际上我保存了 32 位 int + 16 位 char = 48 位。为什么 Java 会进行这种转换?此外,无论是 char 还是 int,Java 是否都会将所有内容都隐式存储在文件中?如何获得 48 位的准确大小?

public static void main(String[] args)
        
            File f = new File("C:/sam.txt");
            int a= 42;
            char c= '.';
            try 
                try 
                    f.createNewFile();
                 catch (IOException e) 
                    e.printStackTrace();  
                
                PrintWriter pw = new PrintWriter(f);
                pw.write(a);
                pw.write(c);
                pw.close();
                System.out.println("file size:"+f.length());
             catch (FileNotFoundException e) 
                e.printStackTrace();  
            

        

【问题讨论】:

它有助于学习如何使用十六进制编辑器来检查文件中的真实内容。 【参考方案1】:

没有。你写了两个字。写入器用于文本数据,而不是二进制数据。 documentation of write(int) 说:

写入单个字符。

由于您平台的默认字符编码将这两个字符存储为一个字节(每个),因此文件长度为 2(2 个字节:文件的长度以字节为单位,as the documentation says)。用文本编辑器打开文件,看看里面有什么。

Java API 文档对于了解类或方法的作用非常有用。你应该阅读它。

【讨论】:

正是这样... Java 将 int 作为 unicode 代码,其长度可以在 1 到 4 个字节之间。如果不需要,可以使用 print() 而不是 write()。 @yankee:不:int 被简单地转换为 char。 好的。我将 pw.write 更改为 pw.print(a) 和 pw.print(c) 现在该方法返回文件长度 = 3 ...我的问题是 int 是 32 位 = 4 字节那么这 4 个字节是如何存储在文件,然后当我写一个字符时,它是如何保存的。当java使用char作为16位或2字节时,为什么结果= 3字节...? @JB:是的,它被转换为一个字符,这意味着它不能有 4 个字节,只有 2 个字节,但这不会改变函数的变量行为。可以是 1 字节或 2 字节,具体取决于它所代表的字符。 @Pan:因为您将 int 写为文本。写入器用于写入文本,而不是字节。再次阅读我的答案。 int 42 写为 char '4' 后跟 char '2'。使用文本编辑器打开文件以理解,并阅读 API 文档。您必须使用 Streams 来写入二进制数据。阅读有关 IO 的 Java 教程:download.oracle.com/javase/tutorial/essential/io【参考方案2】:

两个 write 调用都在写入一个 char,它在内存中是 16 位,但是由于

new PrintWriter(f)

使用默认字符集编码(可能是您系统上的 ASCII 或 UTF-8),它会导致写入 2 个字节。

【讨论】:

以上是关于在 Java 中确定和打印文件大小的主要内容,如果未能解决你的问题,请参考以下文章

如何把A4的word文档,用A5大小的纸张打印出来,

用于从网站下载图像并显示文件大小的 Java 程序

在 Java 中,确定对象大小的最佳方法是啥?

别人编写好的jasper,Java调用打印pdf怎么控制其纸张大小

PDF电子发票如何打印

将字符串打印到文件,为啥需要额外的位?