)
要執(zhí)行這些 Java 程序你需要遵循以下步驟。這些程序涵蓋了 Java I/O 操作的核心類包括File、字節(jié)流、字符流、緩沖流、序列化等。1. 環(huán)境準備與編譯首先確保你已安裝 Java 開發(fā)工具包 (JDK)。然后為每個程序創(chuàng)建獨立的.java文件并編譯。1.1 創(chuàng)建與編譯文件將每個listing的代碼分別保存為對應的.java文件。例如# 創(chuàng)建并編譯 FileDemo.java cat FileDemo.java EOF // Demonstrate File. import java.io.File; class FileDemo { static void p(String s) { System.out.println(s); } public static void main(String args[]) { File f1 new File(/java/COPYRIGHT); p(File Name: f1.getName()); p(Path: f1.getPath()); p(Abs Path: f1.getAbsolutePath()); p(Parent: f1.getParent()); p(f1.exists() ? exists : does not exist); p(f1.canWrite() ? is writeable : is not writeable); p(f1.canRead() ? is readable : is not readable); p(is (f1.isDirectory() ? : not a directory)); p(f1.isFile() ? is normal file : might be a named pipe); p(f1.isAbsolute() ? is absolute : is not absolute); p(File last modified: f1.lastModified()); p(File size: f1.length() Bytes); } } EOF javac FileDemo.java注意listing 3(OnlyExt.java) 是一個過濾器類需要先編譯因為它被listing 4(DirListOnly.java) 依賴。# 編譯過濾器類 cat OnlyExt.java EOF import java.io.*; public class OnlyExt implements FilenameFilter { String ext; public OnlyExt(String ext) { this.ext . ext; } public boolean accept(File dir, String name) { return name.endsWith(ext); } } EOF javac OnlyExt.java1.2 依賴關系與編譯順序部分程序之間存在依賴關系編譯順序如下程序文件依賴項編譯順序OnlyExt.java(Listing 3)無1DirListOnly.java(Listing 4)OnlyExt.class2SerializationDemo.java(Listing 23)MyClass(內(nèi)部類)獨立編譯其他程序無任意2. 程序執(zhí)行與結果分析執(zhí)行程序前請根據(jù)代碼中的文件路徑如/java/COPYRIGHT確保相應文件或目錄存在或修改路徑為本地有效路徑。2.1 文件與目錄操作 (Listing 1, 2, 4)FileDemo(Listing 1)輸出指定文件如/java/COPYRIGHT的屬性信息。如果文件不存在exists()將返回falselength()等方法可能返回0或默認值。DirList(Listing 2)列出指定目錄如/java下的所有文件和子目錄并區(qū)分類型。DirListOnly(Listing 4)依賴OnlyExt過濾器僅列出指定目錄中擴展名為.html的文件。2.2 字節(jié)流操作 (Listing 5-13)FileInputStreamDemo(Listing 5)讀取自身源文件演示available()、read()、skip()等方法。FileOutputStreamDemo(Listing 6 7)將字符串寫入三個文件。Listing 6 使用傳統(tǒng)try-catch-finally關閉資源Listing 7 使用try-with-resources語法Java 7這是更推薦的自動資源管理方式 。ByteArrayInputStreamDemo(Listing 8)與ByteArrayInputStreamReset(Listing 9)演示從字節(jié)數(shù)組讀取數(shù)據(jù)以及reset()方法重置流。ByteArrayOutputStreamDemo(Listing 10)演示將數(shù)據(jù)寫入內(nèi)部字節(jié)數(shù)組并可轉換為字符串或寫入其他輸出流。BufferedInputStreamDemo(Listing 11)與PushbackInputStreamDemo(Listing 12)演示緩沖流和回退流用于標記讀取和回退操作。SequenceInputStreamDemo(Listing 13)將多個輸入流串聯(lián)成一個流順序讀取。2.3 字符流與高級 I/O (Listing 14-22)PrintfDemo(Listing 14)演示System.out.printf()的格式化輸出功能。DataIODemo(Listing 15)使用DataOutputStream和DataInputStream讀寫基本數(shù)據(jù)類型。FileReaderDemo(Listing 16)與FileWriterDemo(Listing 17)字符流方式讀寫文件。CharArrayReaderDemo(Listing 18)與CharArrayWriterDemo(Listing 19)字符數(shù)組的讀寫操作。BufferedReaderDemo(Listing 20)與PushbackReaderDemo(Listing 21)字符緩沖流和回退流。ConsoleDemo(Listing 22)從控制臺讀取輸入注意在某些 IDE 中System.console()可能返回null。2.4 對象序列化 (Listing 23)SerializationDemo(Listing 23)演示對象的序列化寫入serial文件與反序列化從serial文件讀取。MyClass必須實現(xiàn)Serializable接口。3. 關鍵注意事項與最佳實踐路徑問題將代碼中的絕對路徑如/java替換為你本地存在的目錄路徑或使用相對路徑如./test.txt。資源管理對于所有InputStream、OutputStream、Reader、Writer等資源務必確保關閉。優(yōu)先使用try-with-resources語法如 Listing 7, 15, 16 所示它可以自動關閉資源避免內(nèi)存泄漏 。異常處理I/O 操作必須處理IOException。示例中使用了try-catch生產(chǎn)代碼可能需要更精細的處理。緩沖區(qū)使用大量 I/O 操作時務必使用緩沖流如BufferedInputStream、BufferedReader包裝底層流可顯著提升性能 。序列化版本SerializationDemo中若修改了MyClass的字段反序列化可能因serialVersionUID不匹配而失敗??娠@式定義private static final long serialVersionUID來保持版本兼容。4. 快速執(zhí)行腳本示例你可以創(chuàng)建一個 Shell 腳本如run_all.sh來批量編譯和運行。以下是一個簡化示例#!/bin/bash # 編譯所有Java文件 javac *.java 2/dev/null # 運行FileDemo (修改路徑為你本地存在的文件) echo Running FileDemo java FileDemo 21 | head -5 # 運行DirList (修改路徑為你本地存在的目錄) echo -e Running DirList java DirList 21# 運行DataIODemo echo -e Running DataIODemo java DataIODemo #清理class文件 # rm *.class注意由于部分程序依賴特定文件或路徑直接全部運行可能報錯。建議根據(jù)你的環(huán)境單獨編譯和運行感興趣的示例。參考來源在Java中23種設計模式分類以及代碼示例JDK 23 12大新特性全解析Java 8 vs JDK 23你的代碼能提速多少Java 23 新特性解析與代碼示例軟件23種設計模式完整版[附Java版示例代碼]23 種設計模式 Java 實現(xiàn)分類解析與代碼示例