Java - I/O 流:初学者指南

你好,有抱负的Java程序员!今天,我们将踏上一段令人兴奋的旅程,进入Java I/O流的世界。如果你完全是编程新手,也无需担心——我将作为你的友好向导,一步一步地带你学习。在本教程结束时,你将能够像专业人士一样处理文件和流!

Java - I/O Streams

什么是I/O流?

在我们深入探讨之前,先来了解一下什么是I/O流。在Java中,流是一系列数据。"I/O"代表输入/输出。因此,I/O流就是Java用来从各种来源读取数据和写入数据的方式,比如文件、网络连接,甚至是控制台。

你可以将流想象成一条数据之河。你可以做以下两件事:

  1. 从河流(输入流)中取出水(数据)
  2. 将水(数据)放入河流(输出流)

标准流

Java为我们提供了三个已经设置好的标准流:

  1. System.in(输入流)
  2. System.out(输出流)
  3. 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