欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到IT世界,在知识的湖畔探索吧!
文件I/O操作作为Java开发中的一个重要组成部分,主要负责Java代码中对于文件的读写操作,可能对于一些长时间不使用Java文件API的开发者来说早都忘记了相关的操作,下面我们就来详细介绍一下Java中的各种文件I/O操作。
Java文件I/O的基本概念
对于文件的I/O操作无非就是完成如下的两个操作。
- 读取文件:将文件内容从磁盘加载到程序中。
- 写入文件:将程序中的数据保存到磁盘文件中。
而在Java中对于文件的I/O操作一般又可以分为两种工作模式,如下所示。
- 字节流(InputStream 和 OutputStream):处理二进制数据,例如图片、视频等。
- 字符流(Reader 和 Writer):处理文本数据,例如 .txt 文件。
下面我们就来回忆一下Java中的那些常用的文件操作类。
文件IO的常用类
在Java中提供了很多的操作类来进行文件处理操作,而这些文件操作类一般都包括在java.io和java.nio.file包中,如下所示,展示了一些常用的文件操作类。
File类
File类表示一个文件或者是一个文件目录,这个类只是对文件或者是文件目录的抽象处理,并不直接执行对文件内容的读写操作,而是用来完成如下的一些功能。
- 创建新文件
- 删除文件
- 获取文件信息
代码如下所示。
import java.io.File; import java.io.IOException; public class FileExample { public static void main(String[] args) { File file = new File("example.txt"); try { if (file.createNewFile()) { System.out.println("文件已创建:" + file.getName()); } else { System.out.println("文件已存在。"); } } catch (IOException e) { System.out.println("创建文件时发生错误。"); e.printStackTrace(); } } }
欢迎大家来到IT世界,在知识的湖畔探索吧!
字节流类
在Java中对于文件操作的字节流类被分为了FileInputStream 和 FileOutputStream,主要就是用来通过以字节流的方式来操作文件。如下所示,通过FileInputStream 和 FileOutputStream来实现文件的复制操作。
欢迎大家来到IT世界,在知识的湖畔探索吧!import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("destination.txt")) { int data; while ((data = fis.read()) != -1) { fos.write(data); } System.out.println("文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } }
字符流类
当然除了字节流之外,在Java中还提供了字符流操作类,如下所示,常见的字符流文件操作类有如下两个FileReader 和 FileWriter,主要的作用就是以字符流的方式实现文本文件读写操作。如下所示实现读取文件并写入另一个文件中。
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CharStreamExample { public static void main(String[] args) { try (FileReader reader = new FileReader("input.txt"); FileWriter writer = new FileWriter("output.txt")) { int data; while ((data = reader.read()) != -1) { writer.write(data); } System.out.println("文本文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } }
使用缓冲流提高效率
在文件流操作的过程中,我们可以通过数据缓冲区来提升对于文件的读写效率,如下所示。是日常开发中常见的一些文件缓冲类和操作介绍。
- BufferedReader 和 BufferedWriter:用于高效处理字符数据。
- BufferedInputStream 和 BufferedOutputStream:用于高效处理字节数据。
下面我们演示一下如何通过BufferedReader 和 BufferedWriter来实现文件的读写操作。
欢迎大家来到IT世界,在知识的湖畔探索吧!import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class BufferedStreamExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("input.txt")); BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { String line; while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); } System.out.println("文件内容已成功复制!"); } catch (IOException e) { e.printStackTrace(); } } }
java.nio.file 包中的文件操作
在Java7之后引入了NIO操作的文件操作包java.nio.file,提供了基于NIO模型的文件操作类,例如比较常用的Files和Paths类都是在这个包中。如下所示,我们通过一个小例子来看看如何通过NIO包中的类来读取整个的文件内容。
import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class NIOExample { public static void main(String[] args) { try { List<String> lines = Files.readAllLines(Paths.get("input.txt")); lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } } }
我们也可以直接通过Files.copy()来实现文件的拷贝操作,如下所示。
欢迎大家来到IT世界,在知识的湖畔探索吧!import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; public class NIOCopyExample { public static void main(String[] args) { try { Files.copy(Paths.get("source.txt"), Paths.get("destination.txt")); System.out.println("文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } }
文件IO的常见错误处理
在进行文件操作的时候无非就是文件找不到,文件操作异常读写异常等一些常见的异常处理。如下所示。
- 文件未找到异常:FileNotFoundException
- 权限不足异常:SecurityException
- IO 异常:IOException
在实现文件操作的时候,我们需要根据文件类型选择合适的文件操作流来实现文件操作,提供缓冲流来提升文件的读写性能,再加上完整的文件异常检查方案,就可以保证高效的文件IO操作。
总结
在Java中提供了很多的文件处理的I/O操作类,从传统的File类和流操作到现代的java.nio.file工具类都是非常好的文件操作支持,开发者可以根据具体的的操作来选择合适的实现方案,在实际开发中也是一样,可能长时间不使用某种技术,会对相关的技术实现有所忘记变得陌生,所以适当的时间回忆一下相关的基础操作,也是对自己能力的提升。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/99063.html