Java IO 流:简介与代码示例

Java IO 流:简介与代码示例

在 Java 中,IO(Input/Output)流是处理输入和输出的核心工具。通过 IO 流,我们可以读取和写入各种数据类型,包括文本、图片、音频等等。在本文中,我们将简要介绍 Java IO 流的基础知识,并附上一些简单的代码示例。

Java IO 流概述

Java IO 流可以根据输入/输出设备的类型和特性,将数据的输入和输出操作简化。它提供了一种抽象的方式,让我们可以使用统一的方式处理不同的输入输出情况。

分类

Java IO 流主要分为两种类型:字节流和字符流。

  1. 字节流 :用于处理二进制数据,如文件上传/下载、图片加载等。主要的字节流类有 InputStreamOutputStream
  2. 字符流 :用于处理文本数据,如文件读写、网络通信等。主要的字符流类有 ReaderWriter

常用类与接口

下表列出了一些常用的 Java IO 流类和接口:

类/接口 描述
FileInputStream/FileOutputStream 以二进制形式读取/写入文件
FileReader/FileWriter 以字符形式读取/写入文件
BufferedReader/BufferedWriter 提供带缓冲的读取/写入操作,提高效率
InputStreamReader/OutputStreamWriter 在字符流和字节流之间进行转换
PrintWriter 提供打印文本的方法
Scanner 用于读取输入,可以解析基本类型和字符串

代码示例

下面我们给出几个简单的 Java IO 流的代码示例。

1. 文件写入

java 复制代码
import java.io.FileWriter;
import java.io.IOException;

public class FileWritingExample {
    public static void main(String[] args) {
        try {
            FileWriter writer = new FileWriter("output.txt");
            writer.write("Hello, this is a text file.");
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例中,我们使用 FileWriter 类将字符串写入到一个名为 "output.txt" 的文件中。

2. 文件读取并打印

java 复制代码
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadingExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们使用 BufferedReaderFileReader 类来读取名为 "input.txt" 的文件,并将文件的内容一行一行地打印到控制台。

3. 网络通信(字符流)

下面的示例是一个简单的客户端-服务器通信,通过 Socket 进行交互。注意,这需要将代码分割为两部分(Server 和 Client)来模拟客户端和服务器之间的网络通信。

首先是服务器端代码:

java 复制代码
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8000)) {
            System.out.println("Server started.");
            Socket socket = serverSocket.accept(); 
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
            BufferedReader consoleIn = new BufferedReader(new InputStreamReader(System.in)); 
            String input; 
            while ((input = consoleIn.readLine()) != null) { 
                out.println(input); 
                System.out.println("echo: " + input); 
            } 
        } catch (IOException e) { 
            System.out.println("Exception caught when trying to listen on port " + "8000" + " or listening for a connection"); 
            System.out.println(e.getMessage()); 
        } 
      }

接着是客户端的代码:

java 复制代码
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try (Socket echoSocket = new Socket("localhost", 8000);
             PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));) {
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("echo: " + in.readLine());
            }
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: localhost.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: localhost.");
            System.exit(1);
        }
    }
}

这个例子是一个简单的回显服务器,客户端发送消息到服务器,服务器会将接收到的消息回传给客户端,并在控制台显示原消息和回传的消息。

总结

Java 的 IO 流提供了处理各种数据输入和输出的强大工具。无论是处理文件,还是处理网络通信,Java IO 流都能提供简单且高效的方式。在理解和使用这些工具时,要记住及时关闭打开的资源,以防止资源泄露。

相关推荐
岁忧19 分钟前
(LeetCode 每日一题) 1865. 找出和为指定值的下标对 (哈希表)
java·c++·算法·leetcode·go·散列表
YuTaoShao22 分钟前
【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
java·算法·leetcode
考虑考虑1 小时前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干1 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
hqxstudying2 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·2 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
Bug退退退1233 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠3 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Zz_waiting.3 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
全栈凯哥3 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端