15.JAVA的输入输出流

发布时间:2023年12月17日

A.输入输出流

java的i/o 流分为两类

在Java中,I/O(输入/输出)流主要分为两大类:字节流(Byte Stream)和字符流(Character Stream)。这两种流分别用于处理字节数据和字符数据,提供了灵活的方式来处理不同类型的数据。

1.字节流

字节流(Byte Stream):

  • InputStream:字节输入流的抽象基类,用于从各种数据源读取字节。
  • OutputStream:字节输出流的抽象基类,用于向各种目标写入字节。
  • InputStream inputStream = new FileInputStream("example.txt");
    OutputStream outputStream = new FileOutputStream("output.txt");
    

2.字符流

字符流(Character Stream):

  • Reader:字符输入流的抽象基类,用于从各种数据源读取字符。
  • Writer:字符输出流的抽象基类,用于向各种目标写入字符
  • Reader reader = new FileReader("example.txt");
    Writer writer = new FileWriter("output.txt");
    

输入流

????????Java的输入流用于从数据源(如文件、网络连接、内存等)读取数据。输入流通常用于读取字节或字符数据,

InputStream(字节输入流):

  • FileInputStream: 从文件中读取字节流。
  • ByteArrayInputStream: 从字节数组中读取字节流。
  • ObjectInputStream: 从输入流中读取对象。
InputStream inputStream = new FileInputStream("example.txt");

Reader(字符输入流):

  • FileReader: 从文件中读取字符流。
  • StringReader: 从字符串中读取字符流。
  • BufferedReader: 提供缓冲功能,可以提高读取效率。
  • Reader reader = new FileReader("example.txt");
    

import java.io.*;

public class InputStreamExample {
    public static void main(String[] args) {
        try {
            InputStream input = new FileInputStream("example.txt");
            int data;
            while ((data = input.read()) != -1) {
                System.out.print((char) data);
            }
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出流

Java的输出流用于将数据写入目标(如文件、网络连接、内存等)。输出流通常用于写入字节或字符数据,

OutputStream(字节输出流):

  • FileOutputStream: 向文件中写入字节流。
  • ByteArrayOutputStream: 向字节数组中写入字节流。
  • ObjectOutputStream: 将对象写入输出流。
  • OutputStream outputStream = new FileOutputStream("output.txt");
    

    Writer(字符输出流):

  • FileWriter: 向文件中写入字符流。
  • StringWriter: 将字符写入字符串。
  • BufferedWriter: 提供缓冲功能,可以提高写入效率。
  • Writer writer = new FileWriter("output.txt");
    

import java.io.*;

public class OutputStreamExample {
    public static void main(String[] args) {
        try {
            OutputStream output = new FileOutputStream("output.txt");
            String data = "Hello, Java I/O!";
            byte[] bytes = data.getBytes();
            output.write(bytes);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

B.File类

????????在Java中,File 类是用于表示文件和目录路径名的抽象。它可以用于创建、删除、重命名文件或目录,查询文件或目录的属性等。File 类并不实际读取或写入文件数据,它主要用于操作文件系统中的文件和目录结构。

例题1在指定盘目录创建文本文件

C.文件的输入输出流

输入流

使用字节输入流(InputStream):

try (InputStream inputStream = new FileInputStream("example.txt")) {
    int data;
    while ((data = inputStream.read()) != -1) {
        // 处理读取的字节数据
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

使用字符输入流(Reader):

try (Reader reader = new FileReader("example.txt")) {
    int data;
    while ((data = reader.read()) != -1) {
        // 处理读取的字符数据
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

输出流

使用字节输出流(OutputStream):

try (OutputStream outputStream = new FileOutputStream("output.txt")) {
    String data = "Hello, World!";
    byte[] bytes = data.getBytes();
    outputStream.write(bytes);
} catch (IOException e) {
    e.printStackTrace();
}

使用字符输出流(Writer):

try (Writer writer = new FileWriter("output.txt")) {
    String data = "Hello, World!";
    writer.write(data);
} catch (IOException e) {
    e.printStackTrace();
}

例题2

例题3

D.带缓存的输入/输出流

????????Java中,可以使用带缓存的输入/输出流来提高读写性能。这些流使用内部缓冲区,以减少实际的物理读写操作,从而提高效率。

带缓存的输入流:

  1. BufferedInputStream:

try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("example.txt"))) {
    int data;
    while ((data = bufferedInputStream.read()) != -1) {
        // 处理读取的字节数据
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

BufferedReader:

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"))) {
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        // 处理读取的一行字符数据
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

带缓存的输出流:

BufferedOutputStream:

try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
    String data = "Hello, World!";
    byte[] bytes = data.getBytes();
    bufferedOutputStream.write(bytes);
} catch (IOException e) {
    e.printStackTrace();
}

BufferedWriter:

try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"))) {
    String data = "Hello, World!";
    bufferedWriter.write(data);
} catch (IOException e) {
    e.printStackTrace();
}

例题4

E.数据输入/输出流

????????Java中,数据输入/输出流是用于进行数据的高级读写操作的流。它们通常被用于读写复杂的数据结构,如对象或基本数据类型的序列

数据输入流:

????????DataInputStream:

try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("data.dat"))) {
    int intValue = dataInputStream.readInt();
    double doubleValue = dataInputStream.readDouble();
    // 读取其他基本数据类型
} catch (IOException e) {
    e.printStackTrace();
}

数据输出流:

DataOutputStream:

try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("data.dat"))) {
    int intValue = 42;
    double doubleValue = 3.14;
    dataOutputStream.writeInt(intValue);
    dataOutputStream.writeDouble(doubleValue);
    // 写入其他基本数据类型
} catch (IOException e) {
    e.printStackTrace();
}

????????这些流允许你以二进制形式读写 Java 的基本数据类型,而不用担心平台差异或手动进行数据转换??DataInputStreamDataOutputStream 通常用于配合其他输入/输出流,如 FileInputStreamFileOutputStream

最后的

文章来源:https://blog.csdn.net/m0_74831526/article/details/134955405
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。