要执行这些 Java 程序你需要遵循以下步骤。这些程序涵盖了 Java I/O 操作的核心类包括File、字节流、字符流、缓冲流、序列化等。1. 环境准备与编译首先确保你已安装 Java 开发工具包 (JDK)。然后为每个程序创建独立的.java文件并编译。1.1 创建与编译文件将每个listing的代码分别保存为对应的.java文件。例如# 创建并编译 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(内部类)独立编译其他程序无任意2. 程序执行与结果分析执行程序前请根据代码中的文件路径如/java/COPYRIGHT确保相应文件或目录存在或修改路径为本地有效路径。2.1 文件与目录操作 (Listing 1, 2, 4)FileDemo(Listing 1)输出指定文件如/java/COPYRIGHT的属性信息。如果文件不存在exists()将返回falselength()等方法可能返回0或默认值。DirList(Listing 2)列出指定目录如/java下的所有文件和子目录并区分类型。DirListOnly(Listing 4)依赖OnlyExt过滤器仅列出指定目录中扩展名为.html的文件。2.2 字节流操作 (Listing 5-13)FileInputStreamDemo(Listing 5)读取自身源文件演示available()、read()、skip()等方法。FileOutputStreamDemo(Listing 6 7)将字符串写入三个文件。Listing 6 使用传统try-catch-finally关闭资源Listing 7 使用try-with-resources语法Java 7这是更推荐的自动资源管理方式 。ByteArrayInputStreamDemo(Listing 8)与ByteArrayInputStreamReset(Listing 9)演示从字节数组读取数据以及reset()方法重置流。ByteArrayOutputStreamDemo(Listing 10)演示将数据写入内部字节数组并可转换为字符串或写入其他输出流。BufferedInputStreamDemo(Listing 11)与PushbackInputStreamDemo(Listing 12)演示缓冲流和回退流用于标记读取和回退操作。SequenceInputStreamDemo(Listing 13)将多个输入流串联成一个流顺序读取。2.3 字符流与高级 I/O (Listing 14-22)PrintfDemo(Listing 14)演示System.out.printf()的格式化输出功能。DataIODemo(Listing 15)使用DataOutputStream和DataInputStream读写基本数据类型。FileReaderDemo(Listing 16)与FileWriterDemo(Listing 17)字符流方式读写文件。CharArrayReaderDemo(Listing 18)与CharArrayWriterDemo(Listing 19)字符数组的读写操作。BufferedReaderDemo(Listing 20)与PushbackReaderDemo(Listing 21)字符缓冲流和回退流。ConsoleDemo(Listing 22)从控制台读取输入注意在某些 IDE 中System.console()可能返回null。2.4 对象序列化 (Listing 23)SerializationDemo(Listing 23)演示对象的序列化写入serial文件与反序列化从serial文件读取。MyClass必须实现Serializable接口。3. 关键注意事项与最佳实践路径问题将代码中的绝对路径如/java替换为你本地存在的目录路径或使用相对路径如./test.txt。资源管理对于所有InputStream、OutputStream、Reader、Writer等资源务必确保关闭。优先使用try-with-resources语法如 Listing 7, 15, 16 所示它可以自动关闭资源避免内存泄漏 。异常处理I/O 操作必须处理IOException。示例中使用了try-catch生产代码可能需要更精细的处理。缓冲区使用大量 I/O 操作时务必使用缓冲流如BufferedInputStream、BufferedReader包装底层流可显著提升性能 。序列化版本SerializationDemo中若修改了MyClass的字段反序列化可能因serialVersionUID不匹配而失败。可显式定义private static final long serialVersionUID来保持版本兼容。4. 快速执行脚本示例你可以创建一个 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注意由于部分程序依赖特定文件或路径直接全部运行可能报错。建议根据你的环境单独编译和运行感兴趣的示例。参考来源在Java中23种设计模式分类以及代码示例JDK 23 12大新特性全解析Java 8 vs JDK 23你的代码能提速多少Java 23 新特性解析与代码示例软件23种设计模式完整版[附Java版示例代码]23 种设计模式 Java 实现分类解析与代码示例