Java 创建一个大文件(java创建文件的几种方式)

createh53个月前 (02-01)技术教程26

有时候,我们在对文件进行测试的时候,可能需要创建一个临时的大文件。

那么问题来了,在 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: 以读、写方式打开文件,要求对文件内容的每次更新都同步写入底层存储设备;

相关文章

java实现文件上传到服务器(java实现文件上传的三种方式)

java实现文件上传到服务器,java实现大文件上传,java实现大文件分块上传,java实现大文件分片上传,java实现大文件切片上传,java实现大文件批量上传,java实现大文件加密上传,jav...

Java操作Office:POI之word生成(java生成doc文档)

程序员架构进阶一 背景 最近在项目开发中,有数据导出到word的需求。这就涉及代码生成word文档的操作,且有格式要求。大家用word做过简历的都有了解,做简历时,会使用表格、图片、文字等元素。而且表...

Android 读写文件(安卓开发读写文件)

Android使用一个非常类似与其他平台上的基于磁盘的文件系统. 这节课讲述如何利用File APIs在Android文件系统中读写文件.File 对象非常适合于流式顺序数据的读写. 如图片文件或是网...

一文了解 DataLeap 中的 Notebook

一、概述Notebook 是一种支持 REPL 模式的开发环境。所谓「REPL」,即「读取-求值-输出」循环:输入一段代码,立刻得到相应的结果,并继续等待下一次输入。它通常使得探索性的开发和调试更加便...

2020-12-11:多个线程同时写同一个日志文件,为...

2020-12-11:多个线程同时写同一个日志文件,为什么相互写的内容不会被覆盖?福哥答案2020-12-11:[答案来自此链接:](https://bbs.csdn.net/topics/39851...

进大厂必备的Java八股文大全(2022最强精简易懂版)

2022年秋招即将来临,很多同学会问Java面试八股文有必要背吗?答案是,必须背,博主是个三本,今年凭借这篇八股文斩获了多个大厂暑期实习offer,相信秋招一定也可以发挥重要作用。你可以讨厌这种模式,...