Определение и печать размера файла в Java - PullRequest
2 голосов
/ 06 июля 2011

Приведенный ниже метод возвращает размер файла как 2. Поскольку он длинный, я предполагаю, что размер файла, который рассчитывает Java, равен 2 * 64 битам.Но на самом деле я сохранил 32-битный int + 16-битный символ = 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 ]

5 голосов
/ 06 июля 2011

Нет.Вы написали два символа.Writers используются для текстовых данных, а не для двоичных данных. документация write (int) гласит:

Записывает один символ.

Поскольку кодировка символов по умолчанию вашей платформы хранит эти два символакак один байт (каждый), длина файла равна 2 (2 байта: длина файла измеряется в байтах, , как указано в документации ).Откройте файл в текстовом редакторе и посмотрите, что там.

Документ API Java действительно полезен, чтобы узнать, что делает класс или метод.Вы должны прочитать это.

1 голос
/ 06 июля 2011

оба вызова для записи записывают символ, который составляет 16 битов в памяти, но, поскольку

new PrintWriter(f)

использует кодировку набора символов по умолчанию (вероятно, ASCII или UTF-8 в вашей системе), это приводит кзаписывается в 2 байта.

...