Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          讀文件

          Posted on 2009-05-24 21:21 啥都寫點 閱讀(169) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • 用RandomAccessFile打開文件輸入流,通過seek方法將讀指針移到文件內容中間,再通過read方法讀取讀指針后文件內容,常用語隨機的讀取文件

          package book.io;

          import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.RandomAccessFile;
          import java.io.Reader;

          /**
           * 多種方式讀文件內容。
           * 按字節讀取文件內容、按字符讀取文件內容、按行讀取文件內容、隨機讀取文件內容
           
          */
          public class ReadFromFile {
              
          /**
               * 以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。
               * 
          @param fileName    文件的名
               
          */
              
          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) {
                          }
                      }
                  }
              }
              
          /**
               * 以字符為單位讀取文件,常用于讀文本,數字等類型的文件
               * 
          @param fileName    文件名
               
          */
              
          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) {
                          }
                      }
                  }
              }
              
          /**
               * 以行為單位讀取文件,常用于讀面向行的格式化文件
               * 
          @param fileName    文件名
               
          */
              
          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) {
                          }
                      }
                  }
              }
              
          /**
               * 隨機讀取文件內容
               * 
          @param fileName    文件名
               
          */
              
          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) {
                          }
                      }
                  }
              }
              
          /**
               * 顯示輸入流中還剩的字節數
               * 
          @param in
               
          */
              
          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);
              }
          }



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 南溪县| 乃东县| 洪洞县| 昭觉县| 精河县| 淳化县| 姚安县| 农安县| 平凉市| 若尔盖县| 哈密市| 钟祥市| 辽宁省| 定州市| 百色市| 屏东市| 宜良县| 商河县| 富蕴县| 九江市| 洛浦县| 青海省| 左权县| 星子县| 和林格尔县| 谷城县| 万荣县| 丹凤县| 嫩江县| 寿宁县| 湘潭市| 金溪县| 醴陵市| 吉水县| 五大连池市| 缙云县| 泽普县| 临沭县| 永和县| 怀远县| 德江县|