文件操作与Java I/O流详解
文件操作基础
// 示例:创建文件File file = new File("example.txt");if (file.createNewFile()) { System.out.println("文件创建成功");} else { System.out.println("文件已存在");}// 示例:创建目录File directory = new File("exampleDir");if (directory.mkdir()) { System.out.println("目录创建成功");} else { System.out.println("目录已存在");}
字符流与字节流
Java的I/O流分为字符流和字节流两种类型。字符流主要用于处理字符数据,而字节流则用于处理二进制数据。每种类型又分为输入流和输出流。
字符流示例
// 读取字符文件try (FileReader reader = new FileReader("example.txt")) { int data; while ((data = reader.read()) != -1) { System.out.print((char) data); }} catch (IOException e) { e.printStackTrace();}// 写入字符文件try (FileWriter writer = new FileWriter("output.txt")) { writer.write("Hello, Java I/O!");} catch (IOException e) { e.printStackTrace();}
字节流示例
// 读取字节文件try (FileInputStream inputStream = new FileInputStream("example.bin")) { int data; while ((data = inputStream.read()) != -1) { System.out.print(data + " "); }} catch (IOException e) { e.printStackTrace();}// 写入字节文件try (FileOutputStream outputStream = new FileOutputStream("output.bin")) { byte[] data = {65, 66, 67, 68, 69}; // ASCII codes for A, B, C, D, E outputStream.write(data);} catch (IOException e) { e.printStackTrace();}
缓冲流提升性能
在处理大量数据时,使用缓冲流可以显著提高性能。BufferedReader和BufferedWriter是常用的缓冲字符流,而BufferedInputStream和BufferedOutputStream是对应的字节流。
// 使用BufferedReader读取字符文件try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); }} catch (IOException e) { e.printStackTrace();}// 使用BufferedWriter写入字符文件try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { writer.write("Hello, Java I/O!");} catch (IOException e) { e.printStackTrace();}
对象序列化
Java的对象序列化允许将对象转换为字节流,以便在网络上传输或保存到文件。ObjectInputStream和ObjectOutputStream是用于处理对象序列化的类。
// 对象序列化try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("object.dat"))) { MyClass obj = new MyClass(); objectOutputStream.writeObject(obj);} catch (IOException e) { e.printStackTrace();}// 对象反序列化try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("object.dat"))) { MyClass obj = (MyClass) objectInputStream.readObject(); // 处理反序列化后的对象} catch (IOException | ClassNotFoundException e) { e.printStackTrace();}
本文介绍了Java中文件操作和I/O流的基本概念,并提供了一些常用的示例代码。通过深入学习这些主题,读者将能够更好地处理文件和流,从而提高程序的灵活性和性能。