Java IO(输入/输出)是Java中用于处理数据流的一组类和接口。它提供了一种方式来读取和写入数据,无论是来自文件、网络连接还是其他数据源。在Java中,IO操作主要通过java.io包中的类来实现。本文将详细介绍Java IO的基本概念、常用类及其用法。
一、基本概念
-
字节流:以字节为单位进行数据传输,主要用于处理二进制数据,如图片、音频等。常用的字节流类有
InputStream
和OutputStream
。 -
字符流:以字符为单位进行数据传输,主要用于处理文本数据。常用的字符流类有
Reader
和Writer
。 -
缓冲区:为了提高读写效率,可以使用缓冲区(
Buffer
)来暂存数据。缓冲区可以减少实际的磁盘或网络访问次数,从而提高性能。
二、方法
值类型 | 方法签名 | 说明 |
---|---|---|
String | getParent() | 返回 File 对象的父目录文件路径 |
String | getName() | 返回 File 对象的纯文件名称 |
String | getPath() | 返回 File 对象的文件路径 |
String | getAbsolutePath() | 返回 File 对象的绝对路径 |
String | getCanonicalPath() | 返回 File 对象的修饰过的绝对路径 |
boolean | exists() | 判断 File 对象描述的文件是否真实存在 |
boolean | isDirectory() | 判断 File 对象代表的文件是否是一个目录 |
boolean | isFile() | 判断 File 对象代表的文件是否是一个普通文件 |
boolean | createNewFile() | 根据 File 对象,自动创建一个空文件。成功创建后返回 true |
boolean | delete() | 根据 File 对象,删除该文件。成功删除后返回 true |
void | deleteOnExit() | 根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行 |
String[] | list() | 返回 File 对象代表的目录下的所有文件名 |
File[] | listFiles() | 返回 File 对象代表的目录下的所有文件,以 File 对象表示 |
boolean | mkdir() | 创建 File 对象代表的目录 |
boolean | mkdirs() | 创建 File 对象代表的目录,如果必要,会创建中间目录 |
boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
三、常用类及其用法
1. File类
File类表示文件和目录路径名的抽象表示形式。可以用来创建、删除、重命名文件和目录,以及获取文件属性等信息。
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File file = new File("test.txt");
if (file.exists()) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
}
}
2. FileInputStream和FileOutputStream
FileInputStream
用于从文件中读取字节数据,FileOutputStream
用于向文件中写入字节数据。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("input.txt");
fos = new FileOutputStream("output.txt");
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
} finally {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
}
}
}
3. BufferedInputStream和BufferedOutputStream
BufferedInputStream
和BufferedOutputStream
分别用于包装FileInputStream
和FileOutputStream
,提供缓冲功能以提高读写效率。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream("input.txt");
fos = new FileOutputStream("output.txt");
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
int data;
while ((data = bis.read()) != -1) {
bos.write(data);
}
} finally {
if (bis != null) {
bis.close();
}
if (bos != null) {
bos.close();
}
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
}
}
}
4. FileReader和FileWriter
FileReader
用于从文件中读取字符数据,FileWriter
用于向文件中写入字符数据。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderWriterDemo {
public static void main(String[] args) throws IOException {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("input.txt");
fw = new FileWriter("output.txt");
int data;
while ((data = fr.read()) != -1) {
fw.write(data);
}
} finally {
if (fr != null) {
fr.close();
}
if (fw != null) {
fw.close();
}
}
}
}
5. BufferedReade
r和BufferedWriter
BufferedReader
和BufferedWriter
分别用于包装FileReader
和FileWriter
,提供缓冲功能以提高读写效率。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderWriterDemo {
public static void main(String[] args) throws IOException {
FileReader fr = null;
FileWriter fw = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
fr = new FileReader("input.txt");
fw = new FileWriter("output.txt");
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} finally {
if (br != null) {
br.close();
}
if (bw != null) {
bw.close();
}
if (fr != null) {
fr.close();
}
if (fw != null) {
fw.close();
}
}
}
}
四、总结
本文介绍了Java IO的基本概念、常用类及其用法。在实际开发中,我们可以根据需要选择合适的类来进行文件和数据流的操作。需要注意的是,为了保证资源的正确释放,建议使用try-with-resources
语句或者在finally
块中关闭流。