最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)按行讀取大文件

 更新時間:2015年05月13日 10:39:28   投稿:hebedich  
這篇文章主要介紹了Java實(shí)現(xiàn)按行讀取大文件的方法的小結(jié),非常的簡單實(shí)用,有需要的小伙伴尅參考下。

Java實(shí)現(xiàn)按行讀取大文件

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

網(wǎng)上流行的那個倆while版本不靠譜

可考慮bufferedinputstream和bufferedoutputstream來字節(jié)讀取,這個代碼太簡單了,適用于非頻繁操作。或采用nio的FileChannel,比較適合于高并發(fā)操作,如下為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();

隨機(jī)讀取文件內(nèi)容

public class ReadFromFile {
  /**
   * 以字節(jié)為單位讀取文件,常用于讀二進(jìn)制文件,如圖片、聲音、影像等文件。
   */
  public static void readFileByBytes(String fileName) {
    File file = new File(fileName);
    InputStream in = null;
    try {
      System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀一個字節(jié):");
      // 一次讀一個字節(jié)
      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("以字節(jié)為單位讀取文件內(nèi)容,一次讀多個字節(jié):");
      // 一次讀多個字節(jié)
      byte[] tempbytes = new byte[100];
      int byteread = 0;
      in = new FileInputStream(fileName);
      ReadFromFile.showAvailableBytes(in);
      // 讀入多個字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
      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) {
        }
      }
    }
  }

  /**
   * 以字符為單位讀取文件,常用于讀文本,數(shù)字等類型的文件
   */
  public static void readFileByChars(String fileName) {
    File file = new File(fileName);
    Reader reader = null;
    try {
      System.out.println("以字符為單位讀取文件內(nèi)容,一次讀一個字節(jié):");
      // 一次讀一個字符
      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("以字符為單位讀取文件內(nèi)容,一次讀多個字節(jié):");
      // 一次讀多個字符
      char[] tempchars = new char[30];
      int charread = 0;
      reader = new InputStreamReader(new FileInputStream(fileName));
      // 讀入多個字符到字符數(shù)組中,charread為一次讀取字符數(shù)
      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("以行為單位讀取文件內(nèi)容,一次讀一整行:");
      reader = new BufferedReader(new FileReader(file));
      String tempString = null;
      int line = 1;
      // 一次讀入一行,直到讀入null為文件結(jié)束
      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) {
        }
      }
    }
  }

  /**
   * 隨機(jī)讀取文件內(nèi)容
   */
  public static void readFileByRandomAccess(String fileName) {
    RandomAccessFile randomFile = null;
    try {
      System.out.println("隨機(jī)讀取一段文件內(nèi)容:");
      // 打開一個隨機(jī)訪問文件流,按只讀方式
      randomFile = new RandomAccessFile(fileName, "r");
      // 文件長度,字節(jié)數(shù)
      long fileLength = randomFile.length();
      // 讀文件的起始位置
      int beginIndex = (fileLength > 4) ? 4 : 0;
      // 將讀文件的開始位置移到beginIndex位置。
      randomFile.seek(beginIndex);
      byte[] bytes = new byte[10];
      int byteread = 0;
      // 一次讀10個字節(jié),如果文件內(nèi)容不足10個字節(jié),則讀剩下的字節(jié)。
      // 將一次讀取的字節(jié)數(shù)賦給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) {
        }
      }
    }
  }

  /**
   * 顯示輸入流中還剩的字節(jié)數(shù)
   */
  private static void showAvailableBytes(InputStream in) {
    try {
      System.out.println("當(dāng)前字節(jié)輸入流中的字節(jié)數(shù)為:" + 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);
  }
}

將內(nèi)容追加到文件尾部

public class AppendToFile {
  /**
   * A方法追加文件:使用RandomAccessFile
   */
  public static void appendMethodA(String fileName, String content) {
    try {
      // 打開一個隨機(jī)訪問文件流,按讀寫方式
      RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
      // 文件長度,字節(jié)數(shù)
      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 {
      //打開一個寫文件器,構(gòu)造函數(shù)中的第二個參數(shù)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");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
    //按方法B追加文件
    AppendToFile.appendMethodB(fileName, content);
    AppendToFile.appendMethodB(fileName, "append end. \n");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
  }
}

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Mybatis Plus插件三種方式的逆向工程的使用

    Mybatis Plus插件三種方式的逆向工程的使用

    這篇文章主要介紹了Mybatis Plus插件三種方式的逆向工程的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Spring Event觀察者模式事件監(jiān)聽詳解

    Spring Event觀察者模式事件監(jiān)聽詳解

    這篇文章主要介紹了Java Spring Event事件監(jiān)聽詳情解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • JavaWeb中的文件的上傳和下載

    JavaWeb中的文件的上傳和下載

    JavaWeb 文件的上傳和下載是指在Web應(yīng)用中實(shí)現(xiàn)用戶上傳文件到服務(wù)器和從服務(wù)器下載文件的功能,通過JavaWeb技術(shù),可以方便地實(shí)現(xiàn)文件的上傳和下載操作,提供更好的用戶體驗(yàn)和數(shù)據(jù)交互,需要的朋友可以參考下
    2023-10-10
  • Spring Boot 項(xiàng)目做性能監(jiān)控的操作流程

    Spring Boot 項(xiàng)目做性能監(jiān)控的操作流程

    這篇文章主要介紹了Spring Boot 項(xiàng)目如何做性能監(jiān)控,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java GUI編程之監(jiān)聽操作實(shí)例分析

    java GUI編程之監(jiān)聽操作實(shí)例分析

    這篇文章主要介紹了java GUI編程之監(jiān)聽操作,結(jié)合實(shí)例形式分析了java GUI編程監(jiān)聽操作的Button監(jiān)聽、TextField文本輸入監(jiān)聽等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • 解決Mybatis?plus實(shí)體類屬性與表字段不一致的問題

    解決Mybatis?plus實(shí)體類屬性與表字段不一致的問題

    這篇文章主要介紹了Mybatis?plus實(shí)體類屬性與表字段不一致解決方法,文末給大家提到了Mybatis-plus中數(shù)據(jù)庫表名和表字段名的相關(guān)知識,需要的朋友可以參考下
    2022-07-07
  • web 容器的設(shè)計(jì)如何實(shí)現(xiàn)

    web 容器的設(shè)計(jì)如何實(shí)現(xiàn)

    這篇文章主要介紹了web 容器的設(shè)計(jì)如何實(shí)現(xiàn)的相關(guān)資料,本文旨在介紹如何設(shè)計(jì)一個web容器,只探討實(shí)現(xiàn)的思路,并不涉及過多的具體實(shí)現(xiàn)。把它分解劃分成若干模塊和組件,每個組件模塊負(fù)責(zé)不同的功能,需要的朋友可以參考下
    2016-12-12
  • springboot @Value實(shí)現(xiàn)獲取計(jì)算機(jī)中絕對路徑文件的內(nèi)容

    springboot @Value實(shí)現(xiàn)獲取計(jì)算機(jī)中絕對路徑文件的內(nèi)容

    這篇文章主要介紹了springboot @Value實(shí)現(xiàn)獲取計(jì)算機(jī)中絕對路徑文件的內(nèi)容,具有很好的參考價(jià)值,希望對大家有所幫助。
    2021-09-09
  • Quartz+Spring Boot實(shí)現(xiàn)動態(tài)管理定時任務(wù)

    Quartz+Spring Boot實(shí)現(xiàn)動態(tài)管理定時任務(wù)

    最近做項(xiàng)目遇到動態(tài)管理定時任務(wù)的需求,剛拿到這個需求還真不知道從哪下手,經(jīng)過一番思考,終于找出實(shí)現(xiàn)思路,接下來通過本文給大家介紹了Quartz+Spring Boot實(shí)現(xiàn)動態(tài)管理定時任務(wù)的相關(guān)知識,需要的朋友可以參考下
    2018-09-09
  • JavaWeb項(xiàng)目中dll文件動態(tài)加載方法解析(詳細(xì)步驟)

    JavaWeb項(xiàng)目中dll文件動態(tài)加載方法解析(詳細(xì)步驟)

    這篇文章主要介紹了JavaWeb項(xiàng)目中dll文件動態(tài)加載方法,步驟詳細(xì),在這里分享給大家,需要的朋友可以了解下。
    2017-09-09

最新評論

衢州市| 武陟县| 忻州市| 杭锦旗| 奎屯市| 水城县| 德保县| 霸州市| 武穴市| 得荣县| 鄂托克前旗| 沁阳市| 湖口县| 理塘县| 布尔津县| 尖扎县| 通州区| 濮阳县| 利津县| 安福县| 钟山县| 临海市| 浑源县| 疏勒县| 柳林县| 阿合奇县| 光山县| 石阡县| 雅江县| 黔西县| 芜湖县| 建湖县| 和林格尔县| 沙田区| 越西县| 南宁市| 老河口市| 抚州市| 香格里拉县| 永定县| 明光市|