在 Java 中确定并打印文件大小
下面的方法返回文件大小为 2。由于它很长,我假设 java 计算的文件大小是 2*64 位。但实际上我保存了一个32位int + 一个16位char = 48位。为什么Java要进行这种转换呢?另外,Java 是否隐式地将所有内容存储在文件中,无论是 char 还是 int ?如何获得 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();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,你写了两个字。写入器用于文本数据,而不是二进制数据。 write(int) 的文档 说:
由于平台的默认字符编码将这两个字符存储为单个字节(每个),因此文件长度为 2(2 个字节:文件的长度以字节为单位,如文档所述)。使用文本编辑器打开该文件,然后查看其中的内容。
Java API 文档对于了解类或方法的作用非常有用。你应该读一下。
No. You wrote two characters. Writers are used for textual data, not for binary data. The documentation of write(int) says:
Since the default character encoding of your platform stores those two characters as a single byte (each), the file length is 2 (2 bytes: the length of a file is measured in bytes, as the documentation says). Open the file with a text editor, and see what's in there.
The Java API doc is really useful to know what a class or method does. You should read it.
两个 write 调用都在写入一个 char,它在内存中为 16 位,但由于
使用默认字符集编码(系统上可能是 ASCII 或 UTF-8),因此会写入 2 个字节。
both calls to write are writing a char, which is 16 bits in memory, but since
uses the default character set encoding (probably ASCII or UTF-8 on your system), it results in 2 bytes being written.