隨筆 - 9, 文章 - 1, 評論 - 2, 引用 - 0
          數據加載中……

          java中多種方式讀文件

          一、多種方式讀文件內容。
          1、按字節讀取文件內容
          2、按字符讀取文件內容
          3、按行讀取文件內容
          4、隨機讀取文件內容
          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下,rn這兩個字符在一起時,表示一個換行。
          //但如果這兩個字符分開顯示時,會換兩次行。
          //因此,屏蔽掉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);
          }

          }


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

          import java.io.FileWriter;
          import java.io.IOException;
          import java.io.RandomAccessFile;

          /**
          * 將內容追加到文件尾部
          */

          public class AppendToFile {

          /**
          * A方法追加文件:使用RandomAccessFile
          @param fileName 文件名
          @param content 追加的內容
          */

          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
          @param fileName
          @param content
          */

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

          }

           


          讀取一個文件的全部內容:
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.BufferedReader;
          import java.io.FileReader;
          import java.io.RandomAccessFile;
          public class TestFile{    

          public static String getFileString(String filename)
          {
            FileInputStream fileinputstream
          =null
            String temp
          ="";  //文件內容
            try{
            
             fileinputstream 
          = new FileInputStream(filename);//讀取模塊文件
             int lenght = fileinputstream.available();
             System.out.println(lenght);
             
          byte bytes[] = new byte[lenght];
             fileinputstream.read(bytes);
             temp 
          = new String(bytes);   
             System.out.println(temp);
             System.out.println(
          "+++++++++++++++++++++++++++++++++++++++++++++++++++");
            }
          catch(Exception e){
                e.printStackTrace();
            }
          finally{
             
          try{
              
          if(fileinputstream!=null){
               fileinputstream.close();
              }

             }
          catch(Exception e){
              e.printStackTrace();
             }

            }

            
          return temp;
          }


           
          public static void main(String [] args){
                  
                  String path
          ="C:/DCN-DAQ-SW-C3550-1[2007-08-08 14-01-42].log";
                  TestFile testFile
          =new TestFile();
                  testFile.getFileString(path);
                  
              }

          }

          posted on 2007-08-08 17:45 趙貴陽 閱讀(593) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 碌曲县| 竹北市| 临海市| 遂川县| 二连浩特市| 永福县| 积石山| 杂多县| 塔城市| 安泽县| 元朗区| 贺兰县| 英山县| 通许县| 滁州市| 临漳县| 治县。| 新余市| 万山特区| 库车县| 增城市| 北川| 广东省| 鹤庆县| 翼城县| 镇江市| 遵义市| 北川| 清原| 伊春市| 旌德县| 德江县| 江油市| 民勤县| 嘉荫县| 乡宁县| 普洱| 兰考县| 凌源市| 湄潭县| 治县。|