1. 程式人生 > >JAVA中讀取檔案(二進位制,字元)內容的方法總結

JAVA中讀取檔案(二進位制,字元)內容的方法總結

publicclass ReadFromFile {
    
/**
     * 以位元組為單位讀取檔案,常用於讀二進位制檔案,如圖片、聲音、影像等檔案。
     
*/publicstaticvoid readFileByBytes(String fileName) {
        File file 
=new File(fileName);
        InputStream in 
=null;
        
try {
            System.out.println(
"以位元組為單位讀取檔案內容,一次讀一個位元組:");
            
// 一次讀一個位元組            in 
=new FileInputStream(file);
            
int tempbyte;
            
while ((tempbyte = in.read()) !=-1) {
                System.out.write(tempbyte);
            }
            in.close();
        } 
catch (IOException e) {
            e.printStackTrace();
            
return;
        }
        
try {
            System.out.println(
"以位元組為單位讀取檔案內容,一次讀多個位元組:");
            
// 一次讀多個位元組byte[] tempbytes =newbyte[100];
            
int byteread =0;
            in 
=new FileInputStream(fileName);
            ReadFromFile.showAvailableBytes(in);
            
// 讀入多個位元組到位元組陣列中,byteread為一次讀入的位元組數while ((byteread = in.read(tempbytes)) !=-1) {
                System.out.write(tempbytes, 
0, byteread);
            }
        } 
catch (Exception e1) {
            e1.printStackTrace();
        } 
finally {
            
if (in !=null) {
                
try {
                    in.close();
                } 
catch (IOException e1) {
                }
            }
        }
    }

    
/**
     * 以字元為單位讀取檔案,常用於讀文字,數字等型別的檔案
     
*/publicstaticvoid readFileByChars(String fileName) {
        File file 
=new File(fileName);
        Reader reader 
=null;
        
try {
            System.out.println(
"以字元為單位讀取檔案內容,一次讀一個位元組:");
            
// 一次讀一個字元            reader =new InputStreamReader(new FileInputStream(file));
            
int tempchar;
            
while ((tempchar = reader.read()) !=-1) {
                
// 對於windows下,\r\n這兩個字元在一起時,表示一個換行。
                
// 但如果這兩個字元分開顯示時,會換兩次行。
                
// 因此,遮蔽掉\r,或者遮蔽\n。否則,將會多出很多空行。if (((char) tempchar) !='\r') {
                    System.out.print((
char) tempchar);
                }
            }
            reader.close();
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        
try {
            System.out.println(
"以字元為單位讀取檔案內容,一次讀多個位元組:");
            
// 一次讀多個字元char[] tempchars =newchar[30];
            
int charread =0;
            reader 
=new InputStreamReader(new FileInputStream(fileName));
            
// 讀入多個字元到字元陣列中,charread為一次讀取字元數while ((charread = reader.read(tempchars)) !=-1) {
                
// 同樣遮蔽掉\r不顯示if ((charread == tempchars.length)
                        
&& (tempchars[tempchars.length -1!='\r')) {
                    System.out.print(tempchars);
                } 
else {
                    
for (int i =0; i < charread; i++) {
                        
if (tempchars[i] =='\r') {
                            
continue;
                        } 
else {
                            System.out.print(tempchars[i]);
                        }
                    }
                }
            }

        } 
catch (Exception e1) {
            e1.printStackTrace();
        } 
finally {
            
if (reader !=null) {
                
try {
                    reader.close();
                } 
catch (IOException e1) {
                }
            }
        }
    }

    
/**
     * 以行為單位讀取檔案,常用於讀面向行的格式化檔案
     
*/publicstaticvoid readFileByLines(String fileName) {
        File file 
=new File(fileName);
        BufferedReader reader 
=null;
        
try {
            System.out.println(
"以行為單位讀取檔案內容,一次讀一整行:");
            reader 
=new BufferedReader(new FileReader(file));
            String tempString 
=null;
            
int line =1;
            
// 一次讀入一行,直到讀入null為檔案結束while ((tempString = reader.readLine()) !=null) {
                
// 顯示行號                System.out.println("line "+ line +""+ tempString);
                line
++;
            }
            reader.close();
        } 
catch (IOException e) {
            e.printStackTrace();
        } 
finally {
            
if (reader !=null) {
                
try {
                    reader.close();
                } 
catch (IOException e1) {
                }
            }
        }
    }

    
/**
     * 隨機讀取檔案內容
     
*/publicstaticvoid readFileByRandomAccess(String fileName) {
        RandomAccessFile randomFile 
=null;
        
try {
            System.out.println(
"隨機讀取一段檔案內容:");
            
// 開啟一個隨機訪問檔案流,按只讀方式            randomFile =new RandomAccessFile(fileName, "r");
            
// 檔案長度,位元組數long fileLength = randomFile.length();
            
// 讀檔案的起始位置int beginIndex = (fileLength >4?4 : 0;
            
// 將讀檔案的開始位置移到beginIndex位置。            randomFile.seek(beginIndex);
            
byte[] bytes =newbyte[10];
            
int byteread =0;
            
// 一次讀10個位元組,如果檔案內容不足10個位元組,則讀剩下的位元組。
            
// 將一次讀取的位元組數賦給bytereadwhile ((byteread = randomFile.read(bytes)) !=-1) {
                System.out.write(bytes, 
0, byteread);
            }
        } 
catch (IOException e) {
            e.printStackTrace();
        } 
finally {
            
if (randomFile !=null) {
                
try {
                    randomFile.close();
                } 
catch (IOException e1) {
                }
            }
        }
    }

    
/**
     * 顯示輸入流中還剩的位元組數
     
*/privatestaticvoid showAvailableBytes(InputStream in) {
        
try {
            System.out.println(
"當前位元組輸入流中的位元組數為:"+ in.available());
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }

    
publicstaticvoid main(String[] args) {
        String fileName 
="C:/temp/newTemp.txt";
        ReadFromFile.readFileByBytes(fileName);
        ReadFromFile.readFileByChars(fileName);
        ReadFromFile.readFileByLines(fileName);
        ReadFromFile.readFileByRandomAccess(fileName);
    }
}