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