Java初级基础篇

Java初级基础篇
最新回答
夏日梧桐雨

2022-09-23 11:34:57

Java初级基础篇:IO流

IO流是Java中用于操作文件的核心机制,通过java.io.*包提供的类和方法,可实现文件的读写、路径管理等功能。以下是关键知识点总结:

一、文件与目录基础概念

  • 文件(File):计算机中存储数据的集合,以二进制(byte码)形式存在。
  • 目录(Directory):文件存放的特定位置,用于组织文件结构。
  • 持久化:将内存数据保存到外存(如数据库或文件)的过程。
  • 文件类型

    二进制文件:存储任意二进制数据(如图片、视频),需用专用工具(察猜前如ULTRA Edit)编辑。

    文本文件:存储ASCII码字符,可用文本编辑器(如记事本)打开。

二、File类:文件与目录操作

File类提供对文件和目录的整体操作,不直接读写内容。常用方法如下:

File f1 = new File("E:testHello.text");
  • 路径相关方法

    getAbsolutePath():返回文件的绝对路径(如E:testHello.text)。

    getPath():返回定义时的路径(如E:testHello.text)。

    getParent():获取父目录路径(如E:test)。

  • 状态判断方法

    isFile():判断是否为文件(返回boolean)。

    isDirectory():判断是否为目录。

    exists():判断文件或目录是否存在。

  • 其他方法

    getName():获取文件名(如Hello.text)。

    length():返回文件大小(字节数)。

三、流(Stream)的核心概念

流是Java中连续传输数据的抽象,类似水流或电流。其核心分类如下:

1. 流的分类
  • 按流向

    输入流(Input Stream):从数据源读取数据(如FileInputStream)。

    输出流(Output Stream):向目标写入数据(如FileOutputStream)。

  • 按数据单位

    字节流:以字节为单位传输(如InputStream、OutputStream)。

    字符流:以字符为单位传输(如Reader、Writer),适合文本处理。

  • 按功能层次

    节点流:直接连接数据源(如FileReader、FileInputStream)。

    处理流:包装节点流以增强功能(如BufferedReader、BufferedInputStream)。

2. 关键流类型与示例
  • 节点流示例:// 读取文件(字节流)FileInputStream fis = new FileInputStream("hello.txt"败清);// 读取文件(字符流)FileReader fr = new FileReader("hello.txt");
  • 处理流示例:// 使用缓冲流提高读取效率BufferedReader br = new BufferedReader(new FileReader("hello.txt"));
  • 转换流

    InputStreamReader:将字节流转换为字符流。

    OutputStreamWriter:将字符流转换为字节流。

    // 字节流转字符流InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"));
3. 流的关闭与资源管理
  • 为什么必须关闭流

    流占用系统资源(如文件描述符、网络连接),垃圾回收器无法自动释兆档放,需显式调用close()。

  • 关闭流的正确方式:FileInputStream fis = null;try { fis = new FileInputStream("hello.txt"); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { // 处理数据 }} catch (IOException e) { e.printStackTrace();} finally { if (fis != null) { try { fis.close(); // 释放资源 } catch (IOException e) { e.printStackTrace(); } }}
  • 注意事项

    System.exit()会强制终止JVM,关闭所有资源,但应优先使用close()。

    Java 7+推荐使用try-with-resources自动关闭流:

    try (FileInputStream fis = new FileInputStream("hello.txt")) { // 自动调用close()} catch (IOException e) { e.printStackTrace();}

四、IO流操作总结

  1. 文件管理:通过File类操作路径、判断状态、获取属性。
  2. 流的选择

    文本数据优先用字符流(如FileReader)。

    二进制数据用字节流(如FileInputStream)。

    需要缓冲或转换时,叠加处理流(如BufferedReader)。

  3. 资源释放:始终在finally块或try-with-resources中关闭流,避免资源泄漏。

掌握以上内容后,可进一步学习NIO(New IO)或Java 7引入的Files工具类,以实现更高效的IO操作。