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("Hello, File I/O!");
writer.newLine();
writer.write("This is a new line.");
} 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}; // ASCII 值為 A, B, C, D, E
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