在 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 中确定和打印文件大小的主要内容,如果未能解决你的问题,请参考以下文章