2017-06-21 73 views
-2
1.File file = new File("abc.txt"); 

    2.  char[] ch=new char[(int)file.length()]; 
    3.  System.out.println(file.length()); 
    4.  FileReader fw=new FileReader(file); 

    5.  fw.read(ch); 

    6.  for(char ch1: ch){ 
    7.   System.out.println(ch1); 
     } 

在第2行中,我們看到ch數組剛剛啓動其索引總數。而在整個代碼中,我們在其內存索引中沒有看到任何數據分配。 但我們也發現For-each循環正在從ch變量中提取數據。這怎麼可能???此char數組從哪裏獲取其數據?

注:文件的abc.txt包含字符數據

+0

在第5行,因爲它作爲參數傳遞到'fw.read()' –

+2

「而在存在來自'abc.txt'文件中讀取並投入char數組'ch.length'字符整個代碼在內存索引中沒有看到任何數據分配「===>'fw.read(ch);'<===它就是這樣。 –

+5

請注意,這仍然是可怕的代碼:1)它假定每個字符只有一個字節。 2)它假定該文件是系統默認編碼。 3)它假定文件的大小不變。 4)它假設一個'read'的調用將讀取整個數據。 5)它不關閉讀者。 –

回答

0

我會讓代碼解釋。

public void test() throws IOException { 
    // Specify the file we want to read. 
    File file = new File("abc.txt"); 
    // Allocate enough space for the file contents. 
    char[] ch = new char[(int) file.length()]; 
    // Tell user how big the file is. 
    System.out.println(file.length()); 
    // Create a FileReader that will read the file. 
    FileReader fw = new FileReader(file); 

    // Read the file into the array. 
    // Note: The array is already the correct length for the file so reads all of the file. 
    fw.read(ch); 

    // Print each character on a separate line. 
    for (char ch1 : ch) { 
     System.out.println(ch1); 
    } 
} 
+0

很酷。但我們只是看到fw.read(ch)正在做一些事情。但是我們沒有看到它是如何在索引中輸入字符的。 – ABC

+0

@ Md.MahadiHossain - 'read'方法用來自文件的數據填充數組。在索引中輸入字符是什麼意思? 'FileReader'擴展了'Reader',它具有[read(char \ [\])](https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html#read(char [])) 方法。 – OldCurmudgeon

+0

@ OldCurmudgeon我知道數組是從abc文件中填充的。文件abc和read()方法中的字符會拉動字符,然後read方法會依次在所有索引中逐個保留字符,這裏索引量已由行號中的file.lenth()方法確定2根據我的代碼。 – ABC