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 流都能提供简单且高效的方式。在理解和使用这些工具时,要记住及时关闭打开的资源,以防止资源泄露。

相关推荐
我爱cope3 分钟前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
朝新_28 分钟前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312111 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts1 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
aq55356003 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
我是无敌小恐龙3 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
心态与习惯4 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
一叶飘零_sweeeet4 小时前
优秀文章合集
java
zopple5 小时前
ThinkPHP5.x与3.x核心差异解析
java·python·php
南境十里·墨染春水5 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习