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

相关推荐
艾菜籽12 分钟前
Spring MVC练习:留言板
java·spring·mvc
左灯右行的爱情29 分钟前
4-Spring SPI机制解读
java·后端·spring
Code小翊30 分钟前
C语言bsearch的使用
java·c语言·前端
yong999030 分钟前
C#驱动斑马打印机实现包装自动打印
java·数据库·c#
好记忆不如烂笔头abc31 分钟前
linux系统记录登录用户的所有操作
java·linux·服务器
sp421 小时前
一套清晰、简洁的 Java AES/DES/RSA 加密解密 API
java·后端
野犬寒鸦1 小时前
从零起步学习MySQL || 第五章:select语句的执行过程是怎么样的?(结合源码深度解析)
java·服务器·数据库·后端·mysql·adb
橘子海全栈攻城狮1 小时前
【源码+文档+调试讲解】基于SpringBoot + Vue的知识产权管理系统 041
java·vue.js·人工智能·spring boot·后端·安全·spring
Chloeis Syntax1 小时前
接10月12日---队列笔记
java·数据结构·笔记·队列
yy.y--2 小时前
Java集合操作实战:List工人管理
java