Java - I/O 流:初学者指南
你好,有抱负的Java程序员!今天,我们将踏上一段令人兴奋的旅程,进入Java I/O流的世界。如果你完全是编程新手,也无需担心——我将作为你的友好向导,一步一步地带你学习。在本教程结束时,你将能够像专业人士一样处理文件和流!
什么是I/O流?
在我们深入探讨之前,先来了解一下什么是I/O流。在Java中,流是一系列数据。"I/O"代表输入/输出。因此,I/O流就是Java用来从各种来源读取数据和写入数据的方式,比如文件、网络连接,甚至是控制台。
你可以将流想象成一条数据之河。你可以做以下两件事:
- 从河流(输入流)中取出水(数据)
- 将水(数据)放入河流(输出流)
标准流
Java为我们提供了三个已经设置好的标准流:
- System.in(输入流)
- System.out(输出流)
- System.err(错误输出流)
让我们从一个简单的例子开始:
import java.util.Scanner;
public class HelloStream {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("你的名字是什么? ");
String name = scanner.nextLine();
System.out.println("你好," + name + "!");
scanner.close();
}
}
在这个例子中,我们使用System.in
从用户那里读取输入,并使用System.out
显示输出。Scanner
类帮助我们轻松地从输入流中读取。
读取和写入文件
现在,让我们来做一些更激动人心的事情——处理文件!
从文件中读取
以下是如何从文件中读取:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("发生错误:" + e.getMessage());
}
}
}
这段代码逐行读取名为"example.txt"的文件,并将每一行打印到控制台。try-with-resources
语句确保我们在读取完毕后正确关闭文件。
写入文件
写入文件同样简单:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("你好,文件I/O!");
writer.newLine();
writer.write("这是一行新内容。");
} catch (IOException e) {
System.err.println("发生错误:" + e.getMessage());
}
}
}
这段代码创建一个名为"output.txt"的新文件,并向其中写入两行内容。
FileOutputStream
有时,你可能需要将二进制数据写入文件。这时FileOutputStream
就派上用场了:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("binary.dat")) {
byte[] data = {65, 66, 67, 68, 69}; // A, B, C, D, E的ASCII值
fos.write(data);
} catch (IOException e) {
System.err.println("发生错误:" + e.getMessage());
}
}
}
这个例子将二进制数据写入名为"binary.dat"的文件。
文件导航和I/O
Java提供了File
类来处理文件和目录路径。以下是一个例子:
import java.io.File;
public class FileNavigationExample {
public static void main(String[] args) {
File file = new File("example.txt");
System.out.println("文件存在:" + file.exists());
System.out.println("文件名:" + file.getName());
System.out.println("绝对路径:" + file.getAbsolutePath());
}
}
这段代码演示了如何使用File
类获取文件的信息。
Java中的目录
处理目录与处理文件类似。让我们看看如何创建一个目录:
import java.io.File;
public class DirectoryExample {
public static void main(String[] args) {
File dir = new File("newDirectory");
if (dir.mkdir()) {
System.out.println("目录创建成功!");
} else {
System.out.println("创建目录失败。");
}
}
}
这段代码在当前工作目录中创建一个名为"newDirectory"的新目录。
列出目录
最后,让我们看看如何列出目录的内容:
import java.io.File;
public class ListDirectoryExample {
public static void main(String[] args) {
File dir = new File(".");
String[] fileList = dir.list();
if (fileList != null) {
for (String fileName : fileList) {
System.out.println(fileName);
}
} else {
System.out.println("目录不存在或不是一个目录。");
}
}
}
这段代码列出了当前目录下的所有文件和目录。
结论
恭喜你!你已经迈出了进入Java I/O流世界的第一步。我们涵盖了从基本的输入/输出到文件处理和目录操作的大量内容。请记住,熟能生巧,所以不要犹豫,尽情地实验这些概念。
以下是我们使用的方法的快速参考表:
方法 | 描述 |
---|---|
Scanner.nextLine() |
从输入中读取一行文本 |
BufferedReader.readLine() |
从文件中读取一行文本 |
BufferedWriter.write() |
将字符串写入文件 |
BufferedWriter.newLine() |
将行分隔符写入文件 |
FileOutputStream.write() |
将字节写入文件 |
File.exists() |
检查文件是否存在 |
File.getName() |
获取文件名 |
File.getAbsolutePath() |
获取文件的绝对路径 |
File.mkdir() |
创建目录 |
File.list() |
列出目录的内容 |
继续编码,继续学习,最重要的是,玩得开心!记住,每个专家都曾是初学者。祝编程愉快!
Credits: Image by storyset