java实现超大文件的读写功能

 更新时间:2019年05月04日 13:29:41   作者:只要你能好  
这篇文章主要为大家详细介绍了java实现超大文件的读写功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

对于几百M或上G的大文件可使用java nio进行读写 , 根据个人的需求 可能需要将一个超大文件读写形成很多较小的文件进行分析,这也不是什么难事,在读完一个缓冲区后 更换写入的对象即可,本文就不做详细介绍了,有需要的可以联系本人。

直接上程序吧

package cn.gzu.readfile;
 import java.io.File; 
 import java.io.IOException; 
 import java.io.RandomAccessFile; 
 import java.nio.ByteBuffer; 
 import java.nio.channels.FileChannel; 
 
 
public class ReadWriteNio { 
 
public static void main(String args[]) throws Exception{ 
 int bufSize = 100; 
 File fin = new File("E:\\jiahui\\2014-09-01.dat"); 
 File fout = new File("E:\\jiahui\\res.txt"); 
 
 System.out.print("开始读取并重写文件,请等待...");
 
 FileChannel fcin = new RandomAccessFile(fin, "r").getChannel(); 
 ByteBuffer rBuffer = ByteBuffer.allocate(bufSize); 
 
 FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel(); 
 ByteBuffer wBuffer = ByteBuffer.allocateDirect(bufSize); 
 
 readFileByLine(bufSize, fcin, rBuffer, fcout, wBuffer); 
 
 System.out.print("读写完成!"); 
} 
 
 /*读文件同时写文件*/
public static void readFileByLine(int bufSize, FileChannel fcin, ByteBuffer rBuffer, 
 FileChannel fcout, ByteBuffer wBuffer){ 
 String enterStr = "\n"; 
 try{ 
 byte[] bs = new byte[bufSize]; 
 
 int size = 0; 
 StringBuffer strBuf = new StringBuffer(""); 
 while((size = fcin.read(rBuffer)) != -1){ 
// while(fcin.read(rBuffer) != -1){ 
 if(size > 1*1024){
 break;
 }
 
 int rSize = rBuffer.position(); 
 rBuffer.rewind(); 
 rBuffer.get(bs); 
 rBuffer.clear(); 
 String tempString = new String(bs, 0, rSize,"UTF-8"); 
 // System.out.println(size+": "+tempString); 
 
 int fromIndex = 0; 
 int endIndex = 0; 
 while((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1){ 
  String line = tempString.substring(fromIndex, endIndex); 
  line = new String(strBuf.toString() + line + "\n"); 
  System.out.println(size+": "+line); 
  //System.out.print("</over/>"); 
  //write to anthone file 
  writeFileByLine(fcout, wBuffer, line); 
 
  strBuf.delete(0, strBuf.length()); 
  fromIndex = endIndex + 1; 
 } 
 if(rSize > tempString.length()){ 
  strBuf.append(tempString.substring(fromIndex, tempString.length())); 
 }else{ 
  strBuf.append(tempString.substring(fromIndex, rSize)); 
 } 
 } 
 } catch (IOException e) { 
 // TODO Auto-generated catch block 
 e.printStackTrace(); 
 } 
} 
 
 /*写文件*/
public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer, String line){ 
 try { 
 //write on file head 
 //fcout.write(wBuffer.wrap(line.getBytes())); 
 //wirte append file on foot 
 fcout.write(wBuffer.wrap(line.getBytes()), fcout.size()); 
 
 } catch (IOException e) { 
 // TODO Auto-generated catch block 
 e.printStackTrace(); 
 } 
} 
 
 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring源码解析后置处理器梳理总结

    Spring源码解析后置处理器梳理总结

    这篇文章主要介绍了Spring源码解析后置处理器梳理总结,在前面几篇文章中梳理了Spring中bean的创建过程,在这个过程中各式各样的后置处理器发挥了不同的作用,可以说后置处理器贯穿了bean的实例化以及初始化过程
    2022-07-07
  • SpringMVC 接收前端传递的参数四种方式小结

    SpringMVC 接收前端传递的参数四种方式小结

    这篇文章主要介绍了SpringMVC 接收前端传递的参数四种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java二分法查找_动力节点Java学院整理

    Java二分法查找_动力节点Java学院整理

    这篇文章主要介绍了Java二分法查找的相关资料,需要的朋友可以参考下
    2017-04-04
  • 使用Java 实现一个“你画手机猜”的小游戏

    使用Java 实现一个“你画手机猜”的小游戏

    这篇文章主要介绍了使用Java 实现一个“你画手机猜”的小游戏,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 详解Java的Exception异常机制

    详解Java的Exception异常机制

    Java的Exception异常机制,为什么会突然聊到异常?其实不是突然,而是我已经准备了很久,但苦于没有好的例子来讲解,从表象到底层实现,今天就带大家详细了解Exception异常,需要的朋友可以参考下
    2021-05-05
  • 使用TraceId在Spring Cloud中实现线上问题快速定位

    使用TraceId在Spring Cloud中实现线上问题快速定位

    在微服务架构中,服务间的互相调用使得问题定位变得复杂,在此背景下,TraceId为我们提供了一个在复杂环境中追踪请求路径和定位问题的工具,本文不仅介绍TraceId的基本概念,还将结合真实场景,为您展示如何在Spring Cloud中应用它
    2023-09-09
  • Java数据结构之红黑树的实现方法和原理详解

    Java数据结构之红黑树的实现方法和原理详解

    这篇文章主要介绍了Java数据结构之红黑树的实现方法和原理,红黑树是一种特殊的二叉查找树,每个结点都要储存位表示结点的颜色,或红或黑,本文将通过示例为大家详细讲讲红黑树的原理及实现,感兴趣的朋友可以了解一下
    2024-02-02
  • Java list与set中contains()方法效率案例详解

    Java list与set中contains()方法效率案例详解

    这篇文章主要介绍了Java list与set中contains()方法效率案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • MyBatis里映射文件sql语句爆红问题及解决方案

    MyBatis里映射文件sql语句爆红问题及解决方案

    文章介绍了在MyBatis映射文件中SQL语句爆红的问题及其解决方法,解决方法是在设置中将SQL的全局方言设为None,然后应用并确认设置即可
    2025-03-03
  • Java file类中renameTo方法操作实例

    Java file类中renameTo方法操作实例

    renameTo()方法是File类的一部分,renameTo()函数用于将文件的抽象路径名重命名为给定的路径名​​,下面这篇文章主要给大家介绍了关于Java file类中renameTo方法操作的相关资料,需要的朋友可以参考下
    2022-11-11

最新评论