用Java确定和打印文件大小

时间:2011-07-05 20:06:08

标签: java file-io filesize printwriter

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

        }

2 个答案:

答案 0 :(得分:5)

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

  

写一个字符。

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

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

答案 1 :(得分:1)

两次写入调用都在写一个char,它在内存中是16位,但是从

开始
new PrintWriter(f)

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