网站首页 > java教程 正文
文件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();
}
}
}
字节流类
在Java中对于文件操作的字节流类被分为了FileInputStream 和 FileOutputStream,主要就是用来通过以字节流的方式来操作文件。如下所示,通过FileInputStream 和 FileOutputStream来实现文件的复制操作。
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来实现文件的读写操作。
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()来实现文件的拷贝操作,如下所示。
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工具类都是非常好的文件操作支持,开发者可以根据具体的的操作来选择合适的实现方案,在实际开发中也是一样,可能长时间不使用某种技术,会对相关的技术实现有所忘记变得陌生,所以适当的时间回忆一下相关的基础操作,也是对自己能力的提升。
- 上一篇: 「Java进阶」I/O操作必备知识点:字节流读写实例讲解
- 下一篇: Java 中文件目录监听实现
猜你喜欢
- 2025-01-06 Java 中文件目录监听实现
- 2025-01-06 「Java进阶」I/O操作必备知识点:字节流读写实例讲解
- 2025-01-06 一篇文章学会Groovy对文件的操作
- 2025-01-06 干货:MAC上轻松搞定查看Java汇编代码
- 2025-01-06 详细介绍一下在Spring Boot中有几种读取配置文件的方式?
- 2025-01-06 【每日一学】文件操作终极指南:Java开发者不可错过的技能
- 2025-01-06 Android 读写文件
- 2025-01-06 【分享】教你如何使用 Java 读取 Excel、docx、pdf 和 txt 文件
你 发表评论:
欢迎- 04-24Java Collections 工具类集合框架中常用算法解析
- 04-24桶排序的简单理解
- 04-24Java集合框架底层实现原理大揭秘
- 04-24Java 集合框架全面解析:选对数据结构,提升开发效率
- 04-24c#集合排序
- 04-24Java面试中常被问到的集合类深度解读
- 04-24VBA技术资料MF278:对集合进行排序
- 04-24Spring 最常用的 7 大类注解,史上最强整理
- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)