程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成按行讀取年夜文件

Java完成按行讀取年夜文件

編輯:關於JAVA

Java完成按行讀取年夜文件。本站提示廣大學習愛好者:(Java完成按行讀取年夜文件)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成按行讀取年夜文件正文


Java完成按行讀取年夜文件

String file = "F:" + File.separator + "a.txt";
FileInputStream fis = new FileInputStream(file);
RandomAccessFile raf = new RandomAccessFile(new File(file),"r");
String s ;
while((s =raf.readLine())!=null){
System.out.println(s);
}
raf.close();
fis.close();

網下流行的誰人倆while版本不靠譜

可斟酌bufferedinputstream和bufferedoutputstream來字節讀取,這個代碼太簡略了,實用於非頻仍操作。或采取nio的FileChannel,比擬合適於高並發操作,以下為filechannel的部門代碼

File inFile = new File("D:\\error");
 File outFile = new File("D:\\to.txt");
 
 FileChannel inFileChannel = new FileInputStream(inFile).getChannel();
 FileChannel outFileChannel = new FileOutputStream(outFile).getChannel();
 
 ByteBuffer buffer = ByteBuffer.allocate(1024);
 while(-1 != inFileChannel.read(buffer)){
  buffer.flip();
  outFileChannel.write(buffer);
  buffer.clear();
 }
 outFileChannel.close();
 inFileChannel.close();

隨機讀取文件內容

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

將內容追加到文件尾部

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

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved