2011-07-05 61 views
2

下面的方法將文件大小返回爲2.由於它很長,我假設java計算的文件大小爲2 * 64位。但實際上我保存了32位int + 16位char = 48位。爲什麼Java會執行此轉換?另外,不管是char還是int,Java是否將所有內容都隱式地存儲在文件中?我如何獲得48位的準確大小?使用Java確定和打印文件大小

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(); 
      } 

     } 
+0

它有助於瞭解如何使用十六進制編輯器來檢查文件中的真實內容。 –

回答

5

不,你寫了兩個字符。編寫者用於文本數據,而不是二進制數據。該documentation of write(int)說:

寫入單個字符。

由於平臺的默認字符編碼存儲這兩個字符作爲一個單字節(每個),文件長度是2(2個字節:一個文件的長度以字節爲單位,as the documentation says)。用文本編輯器打開文件,看看裏面有什麼。

Java API doc對於瞭解類或方法的作用非常有用。你應該閱讀它。

+0

究竟發生了什麼...... Java將int作爲一個unicode代碼,它可以有1到4個字節之間的任何長度。如果不需要,可以使用print()而不是write()。 – yankee

+2

@yankee:不能:int只是簡單地轉換爲char。 –

+0

好的。我改變了pw.print(a)和pw.print(c),現在該方法返回文件長度= 3 ...我的問題是一個int是32位= 4字節,那麼如何將這4個字節存儲在該文件,然後當我寫了一個單一的字符如何被保存。爲什麼當java使用char作爲16位或2個字節時結果= 3個字節...? – Pan

1

都要求寫是寫一個字符,這是在內存16位,但由於

new PrintWriter(f) 

使用默認字符集編碼(可能是ASCII或您的系統上UTF-8),它導致正在寫入2個字節。