java讀取文件大全

jopen 10年前發布 | 50K 次閱讀 Java開發 Java

1、按字節讀取文件內容
2、按字符讀取文件內容
3、按行讀取文件內容

4、隨機讀取文件內容

public   class  ReadFromFile {
     /**
     * 以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。
      */
     public   static   void  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  =   new   byte [ 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) {
                }
            }
        }
    }

     /**
     * 以字符為單位讀取文件,常用于讀文本,數字等類型的文件
      */
     public   static   void  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  =   new   char [ 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) {
                }
            }
        }
    }

     /**
     * 以行為單位讀取文件,常用于讀面向行的格式化文件
      */
     public   static   void  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) {
                }
            }
        }
    }

     /**
     * 隨機讀取文件內容
      */
     public   static   void  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  =   new   byte [ 10 ];
             int  byteread  =   0 ;
             //  一次讀10個字節,如果文件內容不足10個字節,則讀剩下的字節。
             //  將一次讀取的字節數賦給byteread
             while  ((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) {
                }
            }
        }
    }

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

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

 

5、將內容追加到文件尾部

public   class  AppendToFile {
     /**
     * A方法追加文件:使用RandomAccessFile
      */
     public   static   void  appendMethodA(String fileName, String content) {
         try  {
             //  打開一個隨機訪問文件流,按讀寫方式
            RandomAccessFile randomFile  =   new  RandomAccessFile(fileName,  " rw " );
             //  文件長度,字節數
             long  fileLength  =  randomFile.length();
             // 將寫文件指針移到文件尾。
            randomFile.seek(fileLength);
            randomFile.writeBytes(content);
            randomFile.close();
        }  catch  (IOException e) {
            e.printStackTrace();
        }
    }

     /**
     * B方法追加文件:使用FileWriter
      */
     public   static   void  appendMethodB(String fileName, String content) {
         try  {
             // 打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
            FileWriter writer  =   new  FileWriter(fileName,  true );
            writer.write(content);
            writer.close();
        }  catch  (IOException e) {
            e.printStackTrace();
        }
    }

     public   static   void  main(String[] args) {
        String fileName  =   " C:/temp/newTemp.txt " ;
        String content  =   " new append! " ;
         // 按方法A追加文件
        AppendToFile.appendMethodA(fileName, content);
        AppendToFile.appendMethodA(fileName,  " append end. /n " );
         // 顯示文件內容
        ReadFromFile.readFileByLines(fileName);
         // 按方法B追加文件
        AppendToFile.appendMethodB(fileName, content);
        AppendToFile.appendMethodB(fileName,  " append end. /n " );
         // 顯示文件內容
        ReadFromFile.readFileByLines(fileName);
    }
} 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!