IO流——(1) 输出、输出、读、写、设备

本文深入讲解Java中的IO流概念,包括输入输出流的基本原理及字节流的工作方式。通过实例演示了如何使用FileWriter将数据写入文件,涵盖了构造方法、编码实现、文件操作等关键环节。

一、IO(Input Output)流

     1、输入输出流是相对于设备而言的。

将外设中的数据读入内存中:输入

将内存中的数据写入外设中:输出

      2、字节流的由来:

      其实就是字节流读取文字字节数据以后,不直接操作而是先查编码表,获取对应的文字,再对这个文字进行简单的操作。

简单说:字节流+编码表

 

 

 3、示意图:

 


二、IO流常用的基类

案例:将一个文件写入到硬盘中:

1、首先得使用Writer,再使用Writer子类中的OutputStreamWriter子类中的FileWriter。

 

2、查看构造方法

    • Constructor and Description
      FileWriter(File file)

      给一个File对象构造一个FileWriter对象。

      FileWriter(File file, boolean append)

      给一个File对象构造一个FileWriter对象。

      FileWriter(FileDescriptor fd)

      构造与文件描述符关联的FileWriter对象。

      FileWriter(String fileName)

      构造一个给定文件名的FileWriter对象。

      FileWriter(String fileName, boolean append)

      构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。

就使用FileWriter(String fileName)

3、编码实现

**
 * @author James
 * @create 2019-12-31 13:56
 *
 * 创建一个可以往文件写入字符串数据的文件输出流对象
 * 如果文件不存在,则会自动创建。如果文件存在则会刷新。
 *
 */
public class FileWriterDemo {

    /**
     * 调用系统换行符
     */
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {

        /**
         * 创建文件输出流对象  如果构造函数中加入true可以进行文件的续写(继续添加)
         * 如果文件不存在,则会自动创建。如果文件存在,则会覆盖。
         */
        FileWriter fw = new FileWriter("demo.txt",true);
        //调用Writer对象中的writer(String str)方法,将数据写入临时缓冲区。
        fw.write("acb"+LINE_SEPARATOR+"hfufbrh");
        //将字符串刷入文件内  将数据直接写入目的地文件中
        fw.flush();
        //关闭流,释放资源,终止操作。在关闭前,会先调用flush()进行刷新缓存区中的内容到目的地。
        fw.close();

    }


}

 

 

 

 

### Java IO常用方法详解 Java IO提供了丰富的类和方法来处理数据的输入输出操作。以下是一些与操作相关的常用方法及其详细解释。 #### 1. 字节(InputStream 和 OutputStream) 字节用于取和入二进制数据,常见的类包括 `FileInputStream` 和 `FileOutputStream`。 - **`read()`** 方法:从输入取一个字节的数据。返回值为取到的字节或 `-1` 表示结束。 ```java int readByte = inputStream.read(); // 取单个字节 ``` 如果需要连续取多个字节,可以使用重载的 `read(byte[] b)` 方法[^2]。 - **`write(int b)`** 方法:将指定的字节输出。 ```java outputStream.write(65); // 入字节值65(对应字符'A') ``` - **`close()`** 方法:关闭并释放与之关联的所有系统资源。 ```java inputStream.close(); outputStream.close(); ``` #### 2. 字符(Reader 和 Writer) 字符用于处理字符数据,支持文本文件的,常见的类包括 `BufferedReader` 和 `BufferedWriter`。 - **`readLine()`** 方法:从字符输入取一行文本。返回值为取到的字符串或 `null` 表示结束。 ```java String line = bufferedReader.readLine(); // 取一行 ``` - **`write(String str)`** 方法:将指定的字符串入字符输出。 ```java bufferedWriter.write("Hello, World!"); // 入字符串 ``` - **`flush()`** 方法:刷新缓冲区,确保所有数据都被入目标。 ```java bufferedWriter.flush(); ``` - **`close()`** 方法:关闭并释放与之关联的所有系统资源。 ```java bufferedReader.close(); bufferedWriter.close(); ``` #### 3. 文件操作辅助类 除了基本的操作外,Java还提供了辅助类来简化文件操作。 - **`Files` 类**:提供静态方法用于文件的操作。 - **`Files.readAllBytes(Path path)`**:将整个文件内容取为字节数组。 ```java byte[] data = Files.readAllBytes(Paths.get("file.txt")); // 取文件为字节数组 ``` - **`Files.write(Path path, byte[] bytes)`**:将字节数组入文件。 ```java Files.write(Paths.get("file.txt"), "Hello, World!".getBytes()); // 入字符串到文件 ``` - **`File` 类**:用于文件和目录路径的操作。 - **`exists()`**:判断文件是否存在。 ```java boolean exists = new File("file.txt").exists(); // 检查文件是否存在 ``` #### 4. 常见异常处理 在进行IO操作时,可能会抛出以下异常: - **`FileNotFoundException`**:尝试访问不存在的文件时抛出。 - **`IOException`**:发生输入/输出错误时抛出。 为了处理这些异常,通常会将代码放在 `try-catch` 块中,或者直接声明方法抛出异常。 ```java try { FileInputStream fis = new FileInputStream("file.txt"); // 其他操作 } catch (FileNotFoundException e) { System.out.println("文件未找到!"); } catch (IOException e) { System.out.println("IO异常!"); } ``` #### 5. 示例代码 以下是一个完整的示例,展示如何使用字符文件内容。 ```java import java.io.*; public class FileExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("input.txt")); BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { String line; while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); // 入换行符 } } catch (IOException e) { e.printStackTrace(); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真香号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值