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

Java中文件大小的确定和打印,java,file-io,filesize,printwriter,Java,File Io,Filesize,Printwriter,下面的方法将文件大小返回为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=

下面的方法将文件大小返回为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();  
            }

        }

不,你写了两个字。写入程序用于文本数据,而不是二进制数据。报告说:

只写一个字符

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


JavaAPI文档对于了解类或方法的功能非常有用。你应该读它。

两个写的调用都是写一个字符,在内存中是16位,但是

new PrintWriter(f)

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

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