网站首页 > java教程 正文
有时候,我们在对文件进行测试的时候,可能需要创建一个临时的大文件。
那么问题来了,在 Java 中如何创建大文件呢?
问题和解决
有些人想到的办法就是定义一个随机的字符串,然后重复很多次,然后将这个字符串写入到文件中。
当然,这个是一个解决方法。
我们可以使用下面的代码来进行创建。
@Test
public void writingToLargeFile() throws IOException {
final RandomAccessFile stream = new RandomAccessFile(fileNameLarge, "rw");
stream.setLength(1024 * 1024 * 1024);
}
生成的文件的大小为 1 个 G。
RandomAccessFile 实例
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。
如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。
该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
现有如下的一个需求,向已存在1G数据的 txt 文本里末尾追加一行文字,
可能大多数朋友会觉得这个需求很容易,直接把文件读到内存中,获得文件的字符串,然后在字符串后添加就可以了。
那么,如果我们现在的文件有 10 GB,那怎么办?
如果全部读到内存中,估计大概率情况会内存溢出了。
这个时候可以使用 RandomAccessFile 来进行操作了。
因为 Random 的大意就是针对文件内容的指针你可以随意进行操作,那么对大文件的读取和处理,这个类就是你的好伙伴了。
另外,从 RandomAccessFile 的构造方法,我们就看到,你需要提供的是文件的路径,而不是文件对象。
这个很容易理解吧,如果我们提供的是文件对象的话,那么你的 JVM 将会要对这个对象实例化以后才能操作,这个内存早就可能会出问题了。
有下面的一些参数你可以使用:
- r: 以只读方式打开文件,如果执行写入操作会抛出IOException;
- rw: 以读、写方式打开文件,如果文件不存在,则尝试创建文件;
- rws: 以读、写方式打开文件,要求对文件内容或元数据的每次更新都同步写入底层存储设备;
- rwd: 以读、写方式打开文件,要求对文件内容的每次更新都同步写入底层存储设备;
猜你喜欢
- 2024-11-16 JAVA实现大文件文件分片上传、断点续传
- 2024-11-16 java大文件分片上传、断点续传、急速秒传
- 2024-11-16 达梦数据库写文件的方式探索(达梦数据库如何)
- 2024-11-16 SpringBoot上如何实现文件上传(springboot文件上传路径配置)
- 2024-11-16 Java Class 类文件格式看这一篇就够了
- 2024-11-16 带你入门Java之每日3分钟Java——编写你的第一个Java程序
- 2024-11-16 Java IO: 文件读写与数据流操作(java io流读取文件)
- 2024-11-16 JAVA基础4:第一次写Java代码(java编程第一步)
- 2024-11-16 用Java代码写一个记事本小程序(用记事本java编写hello word)
- 2024-11-16 WEB开发——文件的上传和下载(web 文件上传)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)