Java快速创建指定大小的文件,最多的解决办法就是循环向文件里面入固定大小的空字节,但是这种方式构建大文件性能比较低下,因此有这样两种方式可供参考:

  Java有一个类:FileChannel,查阅API发现通过这个类来实现复制文件比简单的循环读取写入可能会高效得多,很多操作系统可将字节直接从文件系统缓存传输到目标通道,而无需实际复制各字节。构建大的文件10GB,20GB,150GB,所用时间都是100毫秒左右。

/** * 创建固定大小的文件 * @param file * @param length * @throws IOException  */
public static void createFixLengthFile(File file, long length) throws IOException{  long start = System.currentTimeMillis();  FileOutputStream fos = null;  FileChannel output = null;  try {  fos = new FileOutputStream(file); output = fos.getChannel(); output.write(ByteBuffer.allocate(1), length-1); } finally { try { if (output != null) { output.close(); } if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } long end = System.currentTimeMillis(); System.out.println("total times "+(end-start)); } 

  另外一种方式就是RandomAccessFile类, 能够更方便,更直观的实现,两者效率相差无几,大文件RandomAccessFile大约是FileChannel的一倍,但是小文件RandomAccessFile效率就要高的多了,但这应该是更推荐的一种方式。

public static void create(File file, long length) throws IOException{  long start = System.currentTimeMillis();  RandomAccessFile r = null;  try {  r = new RandomAccessFile(file, "rw");  r.setLength(length);  } finally{ if (r != null) { try { r.close(); } catch (IOException e) { e.printStackTrace(); } } } long end = System.currentTimeMillis(); System.out.println(end-start); } 

  完整代码示例:

public class CreateFile
{public static void main(String[] args) throws IOException{String filePath = "D:\\temp\\api-auto-test\\10000-files";File file = new File(filePath);if(!file.exists()){file.mkdirs();}long start = System.currentTimeMillis();  for(int i=0;i<10000;i++){String fileName = "auto-test1"+i;File f = new File(filePath,fileName);if(!f.exists()){createFile(f,1l);}}long end = System.currentTimeMillis();  System.out.println("total times "+(end-start));  start = System.currentTimeMillis();  for(int i=0;i<10000;i++){String fileName = "auto-test2"+i;File f = new File(filePath,fileName);if(!f.exists()){createFixLengthFile(f,1l);}}end = System.currentTimeMillis();  System.out.println("total times "+(end-start)); }public static void createFixLengthFile(File file, long length) throws IOException{  FileOutputStream fos = null;  FileChannel output = null;  try {  fos = new FileOutputStream(file);  output = fos.getChannel();  output.write(ByteBuffer.allocate(1), length-1);  } finally {  try {  if (output != null) {  output.close();  }  if (fos != null) {  fos.close();  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  private static void createFile(File file, long length) throws IOException{RandomAccessFile ff = null;try{ff = new RandomAccessFile(file,"rw");ff.setLength(length);}finally{if (ff != null){try{ff.close();}catch(Exception e){e.printStackTrace();}}}}
}

View Code

转载于:https://www.cnblogs.com/jing99/p/9179703.html

Java构建指定大小文件相关推荐

  1. cmd fsutil 命令 - 创建指定大小文件命令

    fsutil /?的帮助内容 behavior 控制文件系统行为 dirty 管理卷的被损坏的位数 file 文件特定命令 fsinfo 文件系统信息 hardlink 硬链接管理 objectid ...

  2. linux大量生成测试文件,Shell脚本创建指定大小文件的测试数据

    我们在测试或调试的时候,有时候会需要生成某个size的文件,比如在测试存储系统时,需要将磁盘剩余空间减少5G,最简单的办法就是拷贝一个5G的文件过来,但是从哪儿去弄这样大小的文件呢,或许你想到随便找一 ...

  3. linux使用dd命令生成指定大小文件

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  4. 使用cmd命令创建指定大小文件

    1.打开电脑的cmd(windows + R) 2.输入命令: fsutil file createnew e:\2GB.txt 2147483648 3.等待cmd运行完成,即可以在指定盘创建一个指 ...

  5. JAVA根据指定大小压缩图片

    /*** 根据指定大小压缩图片** @param sourceFilePath 源图片路径 + 文件名(例 "D:\\image\\aa.jpg")* @param outFile ...

  6. Linux下生成指定大小文件(命令+Java程序)

    1.dd命令 of:fileName为文件名称,例如test.txt : bs:设置一次复制的大小,例如1M: count:设置复制次数,例如100: dd if=/dev/zero of=<f ...

  7. java 写入指定路径文件_java对指定目录下文件读写操作介绍 | 学步园

    最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动.为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了下面的代码. 1.读取指定的 ...

  8. linux如何批量清理文件大小,Linux下自动清理超过指定大小文件的方法

    由于线上业务用的squid,根据经验值如果长时间运行则缓存目录下的swap.state会慢慢变大,一旦超过60M,squid的性能就会急剧下降,因此需要定时去清理大于60M的swap.state文件. ...

  9. linux 文件大小 自动变化 写,Linux下自动清理超过指定大小文件的方法

    由于线上业务用的squid,根据经验值如果长时间运行则缓存目录下的swap.state会慢慢变大,一旦超过60M,squid的性能就会急剧下降,因此需要定时去清理大于60M的swap.state文件. ...

  10. java删除指定的文件夹_java脚本删除指定目录下的所有指定名称的文件夹

    前阵子出差,经常拷贝项目源码,源码里面总是包括.svn文件夹,使得拷贝起来很麻烦,而且文件大了很多,所以自己编写小程序删除,基于同事也经常让我传这段代码,干脆制作成可执行文件.并且是通用的删除小程序. ...

最新文章

  1. 某华为程序员爆料:主动离职,公司竟也给n+1,到手15万,华为真良心!
  2. 如何独立实现一个基于知识图谱的问答系统
  3. 数据基本类型以及相关举例
  4. android sdk 目录说明,Android的sdk、api及工程目录说明
  5. CVE-2014-6332 修改浏览器安全属性开启Godmode
  6. C语言程序设计 目录
  7. PKI/CA工作原理及架构
  8. STM32L476+STM32cubeMx+Freemodbus移植记录
  9. Emacs第一天安装和简单配置
  10. 如何搭建自己的私有云盘
  11. mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn
  12. nbiot和2g_浅谈NBIOT
  13. 仿抖音视频详情页点赞红心动效
  14. 中国石油大学《催化原理》第三阶段在线作业
  15. ROS2 基础概念 节点
  16. 如何使用百度baidu对某个特定网站进行站内搜索/检索
  17. 华为ensp防火墙nat64案例配置
  18. 十一、决策树和随机森林
  19. 移动网络的切换、重选和重定向
  20. 糊里糊涂违背了规则,硅胶制品很是懊悔

热门文章

  1. Linux网络子系统中报文的接收及NAPI的实现
  2. $.ajax的回调function中的this与 element-ui的this.$alert冲突问题解决
  3. lvs keepalive配置Jenkins2高可用
  4. hdfs 创建用户和用户组_HDFS原理 | 一文读懂HDFS架构与设计
  5. python图书馆管理系统 面向对象_python---面向对象程序设计之图书管理系统
  6. 6.4Spring环境配置等级和优先级
  7. Pytesseract-windows安装及初步使用
  8. 梯度下降来龙去脉附matlab代码
  9. MATLAB中的corrcoef函数求两个向量的相关系数。
  10. .net邮件发送帮助类