在之前的文章中,我们了解到在 Java I/O 体系中,File 类是唯一代表磁盘文件本身的对象。,File 类定义了一些与平台无关的方法来操作文件,包括检查一个文件是否存在、创建、删除文件、重命名文件、判断文件的读写权限是否存在、设置和查询文件的最近修改时间等等操作。,值得注意的地方是,Java 中通常的 File 并不代表一个真实存在的文件对象,当你通过指定一个路径描时,它就会返回一个代表这个路径相关联的一个虚拟对象,这个可能是一个真实存在的文件或者是一个包含多个文件的目录。,下面我们一起来看看 File 类有哪些操作方法,以及实际使用过程中如何避坑。,大家 JDK 中源代码,你会发现 File 类没有无参构造方法,最常用的是使用下面的构造方法来生成 File 对象。,以 windows 操作系统为例,操作文件的方式如下!,File 类中定义了很多关于 File 对象的一些操作方法,我们通过一段代码一起来看看。,输出结果如下:,示例代码中,基本比较全面地演示了 File 的一些基本用法,比如文件或者文件夹的新增、重命名、删除,以及获取文件或者文件夹相关信息等操作。,其中有两点地方,值得注意:,关于不同操作系统下的路径符号问题解决办法!(windows->“\”;Linux->“/”),在实际的编程过程中,我们不可能为了区分操作系统,然后又单独写一份文件路径。,可以通过File.separator来实现跨平台的编程逻辑,File.separator会根据不同的操作系统取不同操作系统下的分隔符。,以上面的示范代码为例,我们可以对写法进行如下改造!,文件的路径结果会与预期一致!,对文件的读写,可以通过字节流或者字符流接口来完成,但不管哪种方式,大致分以下几个步骤完成。,具体的代码实践如下!,字节流接口的文件写入,可以通过OutputStream下的子类FileOutputStream来实现文件的数据写入操作。,具体实例如下:,上面的操作方式会覆盖原始数据,如果想在已有的文件里面,进行追加写入数据,可以如下方式实现。,字节流方式的文件读取,可以通过InputStream下的子类FileInputStream来实现文件的数据读取操作。,具体实例如下:,在之前的文章中,我们了解到为了简化字符的数据传输操作,JDK 提供了 Writer 与 Reader 字符流接口。,字符流方式的文件写入,可以通过Writer下的子类FileWriter来实现文件的数据写入操作。,具体实例如下:,字符流方式的文件读取,可以通过Reader下的子类FileReader来实现文件的数据读取操作。,具体实例如下:,在实际的软件开发过程中,避免不了文件拷贝。通过以上的接口方法,我们可以很容易的写出一个文件复制的方法。,比如以字节流操作为例,具体实例如下:,除此之外,JDK 也支持采用缓存流读写技术来实现数据的高效读写。,之所为高效,是因为字节缓冲流内部维护了一个缓冲区,读写时先将数据存入缓冲区中,当缓冲区满时再将数据一次性读取出来或者写入进去,这样可以减少与磁盘实际的 I/O 操作次数,可以显著提升读写操作的效率。,比如以字节流缓冲流为例,包装类分别是:BufferedInputStream(字节缓存输入流) 和 BufferedOutputStream(字符缓存输入流)。,采用缓冲流拷贝文件,具体实例如下:,在大文件的拷贝中,使用缓存流比不使用缓存流技术至少快 10 倍,耗时是很明显的,大家可以亲自试一下。,在之前的文章中,我们了解到字节流与字符流,两者其实是可以互转的。,其中 InputStreamReader 和 OutputStreamWriter 就是转化桥梁。,字节流转字符流的操作,主要体现在数据的读取阶段,转化过程如下图所示:,,以上文中的字节流接口读取文件为例,如果我们想要转换字符流接口来读取数据,具体的操作方式如下:,当读取数据的时候,先通过字节流读取,再转成字符流读取。,字节流转字符流,需要指定编码规则,如果没有指定,会取当系统默认的编码规则。,字符流转字节流的操作,主要体现在数据的写入阶段,转化过程如下图所示:,图片,以上文中的字节流接口写入文件为例,如果我们想要转换字符流接口来写入数据,具体的操作方式如下:,同样的,当写入数据的时候,先通过字符流写入,再转成字节流输出。,字符流转字节流,也需要指定编码规则,如果没有指定,会取当系统默认的编码规则。,本文主要围绕 Java 对磁盘文件的读取和写入数据的方式做了一次简单的总结。
© 版权声明
文章版权归作者所有,未经允许请勿转载。