Klaytn中文网
你的位置:NuriTopia中文网 > Klaytn中文网 > Java中文件读写操作与常用技巧分享Java中文件读写操作与常用技巧分享
发布日期:2025-01-03 19:03 点击次数:166
一、摘要
在之前的文章中,我们了解到在 Java I/O 体系中,File 类是唯一代表磁盘文件本身的对象。
File 类定义了一些与平台无关的方法来操作文件,包括检查一个文件是否存在、创建、删除文件、重命名文件、判断文件的读写权限是否存在、设置和查询文件的最近修改时间等等操作。
值得注意的地方是,Java 中通常的 File 并不代表一个真实存在的文件对象,当你通过指定一个路径描时,它就会返回一个代表这个路径相关联的一个虚拟对象,这个可能是一个真实存在的文件或者是一个包含多个文件的目录。
下面我们一起来看看 File 类有哪些操作方法,以及实际使用过程中如何避坑。
二、File 类介绍
大家 JDK 中源代码,你会发现 File 类没有无参构造方法,最常用的是使用下面的构造方法来生成 File 对象。
以 windows 操作系统为例,操作文件的方式如下!
File 类中定义了很多关于 File 对象的一些操作方法,我们通过一段代码一起来看看。
输出结果如下:
文件目录存在父节点路径是一个目录文件存在路径下有文件:D:\Files\1.txt;D:\Files\2.txt;D:\Files\3.txt;files[0]1.txtfiles[0]的文件路径:D:\Files\1.txtfiles[0]的绝对路径:D:\Files\1.txtfiles[0]的父文件夹名:D:\Filesfiles[0]的存在files[0]的可写files[0]的可读file[0]不可执行files[0]的不是目录files[0]的是文件files[0]的路径名是绝对路径files[0]的最后修改时间:1686814709000files[0]的大小:8 Bytesfiles[0]的路径转换为URI:file:/D:/Files/1.txt
示例代码中,基本比较全面地演示了 File 的一些基本用法,比如文件或者文件夹的新增、重命名、删除,以及获取文件或者文件夹相关信息等操作。
其中有两点地方,值得注意:
第一个就是分隔符的问题。不同的操作系统,路径分隔符是不一样的,这个可以通过File.separator解决,具体实现看下面第二个就是删除的如果是一个文件夹的话,文件夹下还有文件/文件夹,是无法删除成功的
关于不同操作系统下的路径符号问题解决办法!(windows->“\”;Linux->“/”)
在实际的编程过程中,我们不可能为了区分操作系统,然后又单独写一份文件路径。
可以通过File.separator来实现跨平台的编程逻辑,File.separator会根据不同的操作系统取不同操作系统下的分隔符。
以上面的示范代码为例,我们可以对写法进行如下改造!
文件的路径结果会与预期一致!
三、文件的读写操作
对文件的读写,可以通过字节流或者字符流接口来完成,但不管哪种方式,大致分以下几个步骤完成。
第一步:获取一个文件 file 对象第二步:通过 file 对象,获取一个字节流或者字符流接口的对象,进行读写操作第三步:关闭文件流
具体的代码实践如下!
3.1、通过字节流接口写入
字节流接口的文件写入,可以通过OutputStream下的子类FileOutputStream来实现文件的数据写入操作。
具体实例如下:
上面的操作方式会覆盖原始数据,如果想在已有的文件里面,进行追加写入数据,可以如下方式实现。
3.2、通过字节流接口读取
字节流方式的文件读取,可以通过InputStream下的子类FileInputStream来实现文件的数据读取操作。
具体实例如下:
3.3、通过字符流接口写入
在之前的文章中,我们了解到为了简化字符的数据传输操作,JDK 提供了 Writer 与 Reader 字符流接口。
字符流方式的文件写入,可以通过Writer下的子类FileWriter来实现文件的数据写入操作。
具体实例如下:
3.4、通过字符流接口读取
字符流方式的文件读取,可以通过Reader下的子类FileReader来实现文件的数据读取操作。
具体实例如下:
3.5、文件拷贝
在实际的软件开发过程中,避免不了文件拷贝。通过以上的接口方法,我们可以很容易的写出一个文件复制的方法。
比如以字节流操作为例,具体实例如下:
除此之外,JDK 也支持采用缓存流读写技术来实现数据的高效读写。
之所为高效,是因为字节缓冲流内部维护了一个缓冲区,读写时先将数据存入缓冲区中,当缓冲区满时再将数据一次性读取出来或者写入进去,这样可以减少与磁盘实际的 I/O 操作次数,可以显著提升读写操作的效率。
比如以字节流缓冲流为例,包装类分别是:BufferedInputStream(字节缓存输入流) 和 BufferedOutputStream(字符缓存输入流)。
采用缓冲流拷贝文件,具体实例如下:
在大文件的拷贝中,使用缓存流比不使用缓存流技术至少快 10 倍,耗时是很明显的,大家可以亲自试一下。
四、字节流与字符流的互转
在之前的文章中,我们了解到字节流与字符流,两者其实是可以互转的。
其中 InputStreamReader 和 OutputStreamWriter 就是转化桥梁。
4.1、字节流转字符流的操作
字节流转字符流的操作,主要体现在数据的读取阶段,转化过程如下图所示:
以上文中的字节流接口读取文件为例,如果我们想要转换字符流接口来读取数据,具体的操作方式如下:
当读取数据的时候,先通过字节流读取,再转成字符流读取。
字节流转字符流,需要指定编码规则,如果没有指定,会取当系统默认的编码规则。
4.2、字符流转字节流的操作
字符流转字节流的操作,主要体现在数据的写入阶段,转化过程如下图所示:
以上文中的字节流接口写入文件为例,如果我们想要转换字符流接口来写入数据,具体的操作方式如下:
同样的,当写入数据的时候,先通过字符流写入,再转成字节流输出。
字符流转字节流,也需要指定编码规则,如果没有指定,会取当系统默认的编码规则。
以上就是Java中文件读写操作与常用技巧分享的详细内容,更多关于Java文件读写的资料请关注脚本之家其它相关文章!
上一篇:没有了
下一篇:Nexon偷改开箱倍率被罚,2023全球手游收入榜中国厂商拿下4席 | 陀螺出海周报
下一篇:Nexon偷改开箱倍率被罚,2023全球手游收入榜中国厂商拿下4席 | 陀螺出海周报
相关文章
- 2025-01-12FEG 过渡到币安智能链 (BSC)
- 2025-01-10如果美国政府决定全面“禁止”加密货币,会怎么办?
- 2025-01-06MOLI万站,正式上线
- 2025-01-04双旦临门
- 2025-01-04马斯克发推,带火了柴犬币