Java 输入输出流
本小节将介绍 Java 中的基本输入输出操作,涵盖输入输出的基本概念、流的概念、输入输出流的应用场景、File 类的使用以及 Java 提供的输入输出流相关 API。
1. 什么是输入和输出(I/O)
1.1 基本概念
在计算机中,输入/输出(Input/Output,缩写为 I/O)是指信息处理系统(如计算机)与外界(可能是人类或其他信息处理系统)之间的通信。输入是系统接收的信号或数据,输出是从系统发送的信号或数据。
在 Java 中,输入和输出可以理解为 Java 程序与外部环境之间的数据交换。Java 程序可以从外部环境(如键盘、文件、网络等)读取数据,也可以将数据写入外部环境(如屏幕、文件、网络等)。
Java 提供了两个用于 I/O 操作的包:
1.2 简单的 Java 输出——打印内容到屏幕
在 Java 中,向屏幕输出内容非常简单,常用的方式有两种:
java">// 打印 Hello World,不换行
System.out.print("Hello World");// 打印 Hello Java,并换行
System.out.println("Hello Java");
1.3 简单的 Java 输入——从键盘输入
Java 提供了 java.util.Scanner
类来获取用户从键盘输入的内容。以下是一个简单的示例:
java">import java.util.Scanner;public class ScannerDemo {public static void main(String[] args) {// 创建扫描器对象Scanner scanner = new Scanner(System.in);System.out.println("请输入您的姓名:");// 将用户输入的内容扫描为字符串String name = scanner.nextLine();// 打印输出System.out.println("你好 " + name + ",欢迎来到!");// 关闭扫描器scanner.close();}
}
运行结果:
请输入您的姓名:
Colorful
你好 Colorful,欢迎来到!
2. 什么是流(Stream)
在 Java 中,输入输出操作是通过流(Stream)来完成的。流是代表数据源或数据目标的对象。你可以从流中读取数据(输入流),也可以向流中写入数据(输出流)。流是一个有序的字节序列,数据通过流以先进先出的方式传输。
3. 输入输出流的应用场景
输入输出流在 Java 中应用广泛,常见的场景包括:
- 文件读写:从文件中读取数据或将数据写入文件。
- 网络通信:通过网络传输数据。
- 数据复制:将一个文件的内容复制到另一个文件。
- 上传文件:在 Web 开发中,上传文件到服务器时需要使用输入输出流。
4. File 类
在 Java 中,java.io.File
类用于表示文件和目录的路径名。通过 File
类,你可以对文件和目录进行创建、删除、重命名等操作。
4.1 实例化 File 对象
要实例化 File
对象,需要传入文件或目录的路径。File
类提供了多个构造方法:
java">File file1 = new File("C:/Users/Colorful/Desktop/imooc/Hello.java"); // 绝对路径
File file2 = new File("Hello.java"); // 相对路径
4.2 绝对路径和相对路径
4.3 判断对象是文件还是目录
File
类提供了两个方法来判断对象是文件还是目录:
java">File file = new File("C:/Users/Colorful/Desktop/imooc/Hello.java");
boolean isFile = file.isFile(); // 判断是否是文件
boolean isDirectory = file.isDirectory(); // 判断是否是目录
4.4 创建和删除目录
- 创建目录:使用
mkdir()
或mkdirs()
方法创建目录。 - 删除目录:使用
delete()
方法删除目录。
java">File dir = new File("C:/Users/Colorful/Desktop/imooc/codes");
if (!dir.exists()) {dir.mkdir(); // 创建目录
}if (dir.exists()) {dir.delete(); // 删除目录
}
4.5 创建和删除文件
- 创建文件:使用
createNewFile()
方法创建文件。 - 删除文件:使用
delete()
方法删除文件。
java">File file = new File("C:/Users/Colorful/Desktop/imooc/test.txt");
if (!file.exists()) {file.createNewFile(); // 创建文件
}if (file.exists()) {file.delete(); // 删除文件
}
5. InputStream 抽象类
InputStream
是 Java 中最基本的输入流抽象类,它是所有输入流的父类。常用的实现类包括 FileInputStream
、ByteArrayInputStream
等。
5.1 FileInputStream 实现类
FileInputStream
用于从文件中读取数据。以下是一个读取文件内容的示例:
java">import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamDemo {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("C:/Users/Colorful/Desktop/imooc/Hello.txt");int n;while ((n = fis.read()) != -1) { // 读取文件内容System.out.print((char) n);}fis.close(); // 关闭流}
}
6. OutputStream 抽象类
OutputStream
是 Java 中最基本的输出流抽象类,它是所有输出流的父类。常用的实现类包括 FileOutputStream
、ByteArrayOutputStream
等。
6.1 FileOutputStream 实现类
FileOutputStream
用于向文件中写入数据。以下是一个写入文件内容的示例:
java">import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamDemo {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("C:/Users/Colorful/Desktop/imooc/Hello.txt");fos.write(72); // 写入字符 'H'fos.write(72); // 写入字符 'H'fos.write(72); // 写入字符 'H'fos.close(); // 关闭流}
}
7. 小结
通过本小节的学习,我们了解了 Java 中输入输出的基本概念,掌握了如何使用 File
类操作文件和目录,以及如何使用 InputStream
和 OutputStream
进行文件的读写操作。输入输出流在 Java 中应用广泛,掌握这些基础知识对于后续的文件操作、网络编程等任务至关重要。