浅谈java IO流——四大抽象类

介绍Java IO流前,先来明确一下IO流的概念。IO(Input/Output)即输入/输出操作,是计算机应用程序与外部世界(用户、文件)进行交互的重要手段。Java IO流是Java程序中用于读写数据的一种机制,Java为此提供了一系列的API以便于开发者使用。

Java IO流分为两种:字节流和字符流。字节流操作所有类型的文件(如音频、视频、图片等),而字符流主要用于操作文本文件(如txt文件)。Java IO流又分为四大抽象类:InputStream、OutputStream、Reader、Writer,其中InputStream和OutputStream是字节流的抽象基类,而Reader和Writer是字符流的抽象基类。

以下是这四个抽象类的具体操作和示例:

InputStream:

InputStream是字节输入流的抽象类,它提供了读取数据的方法。对于InputStream的所有实现类,读取数据的方法都具有类似的名称,如read()、available()等。

示例1:从文件读取数据

    FileInputStream fis = null;
    try {
        fis = new FileInputStream("file.txt");
        int data;
        while ((data = fis.read()) != -1) {
            System.out.println((char)data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

示例2:从网络读取数据

    URL url = null;
    InputStream is = null;
    try {
        url = new URL("http://www.baidu.com");
        is = url.openStream();
        int data;
        while ((data = is.read()) != -1) {
            System.out.println((char)data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

OutputStream:

OutputStream是字节输出流的抽象类,它提供了写入数据的方法。同样,对于OutputStream的所有实现类,写入数据的方法都具有类似的名称,如write()、flush()等。

示例1:将数据写入文件

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream("file.txt");
        String data = "Hello, World!";
        fos.write(data.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

示例2:将数据通过网络写出

    URL url = null;
    OutputStream os = null;
    try {
        url = new URL("http://www.baidu.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        os = connection.getOutputStream();
        String data = "name=value";
        os.write(data.getBytes());
        os.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Reader:

Reader是字符输入流的抽象类,它提供了读取数据的方法。同样,对于Reader的所有实现类,读取数据的方法都具有类似的名称,如read()、mark()等。

示例1:从文件中读取数据

    FileReader fr = null;
    try {
        fr = new FileReader("file.txt");
        int data;
        while ((data = fr.read()) != -1) {
            System.out.println((char)data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

示例2:从网络中读取数据

    URL url = null;
    Reader reader = null;
    try {
        url = new URL("http://www.baidu.com");
        reader = new InputStreamReader(url.openStream());
        int data;
        while ((data = reader.read()) != -1) {
            System.out.println((char)data);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Writer:

Writer是字符输出流的抽象类,它提供了写入数据的方法。同样,对于Writer的所有实现类,写入数据的方法都具有类似的名称,如write()、flush()等。

示例1:将数据写入文件

    FileWriter fw = null;
    try {
        fw = new FileWriter("file.txt");
        String data = "Hello, World!";
        fw.write(data);
        fw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

示例2:将数据通过网络写出

    URL url = null;
    Writer writer = null;
    try {
        url = new URL("http://www.baidu.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        writer = new OutputStreamWriter(connection.getOutputStream());
        String data = "name=value";
        writer.write(data);
        writer.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

以上就是浅谈Java IO流——四大抽象类的完整攻略,希望对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈java IO流——四大抽象类 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • win10提示错误应用程序SearchIndexer.exe的解决方法

    Win10提示错误应用程序SearchIndexer.exe的解决方法 问题描述 当你在使用Win10电脑时,可能会遇到类似以下提示的错误: 应用程序SearchIndexer.exe引发了一个问题, 需要关闭。Windows会通知您是否有解决方法。 这个错误会影响你的日常使用,因为SearchIndexer.exe是Windows中负责搜索文件的系统服务,…

    other 2023年6月25日
    00
  • Python基于socket实现TCP客户端和服务端

    以下是“Python基于socket实现TCP客户端和服务端”的完整攻略: 什么是Socket以及TCP/IP协议? Socket:Socket是通信两端建立连接所用的一个对象,可以用来发送和接收数据。 TCP/IP协议:TCP/IP协议是Internet网络协议的基础,它定义了数据如何从一个计算机传输到另一个计算机,并规定了各种服务的标准规范。 Pytho…

    other 2023年6月27日
    00
  • 为什么datetime.minvalue不能在c#中用作可选参数

    为什么DateTime.MinValue不能在C#中用作可选参数 在C#中,DateTime.MinValue是一个常量,表示DateTime类型的最小值。尽管它可以在方法中使用,但它不能用作可选参数。本攻略将详细介绍为什么DateTime.MinValue不能用作可选参数,并提供两个示例来说明这个问题。 问题描述 我们想在C#中定义一个方法,其中一个参数是…

    other 2023年5月9日
    00
  • Java中Map的遍历方法及性能测试

    Java中Map的遍历方法及性能测试 Map是Java中常用的数据结构之一,用于存储键值对。在实际开发中,我们经常需要对Map进行遍历操作。本文将详细介绍Java中Map的遍历方法,并进行性能测试。 1. 遍历方法 Java中Map的遍历方法有多种,常用的包括: 1.1 使用EntrySet遍历 Map<String, Integer> map …

    other 2023年10月17日
    00
  • redis终于有比较大的进展了 redis3.0.1稳定版本发布 支持…

    Redis 3.0.1稳定版本发布,支持更多新特性 Redis是一个基于内存的Key-Value数据库,其以高性能、高并发和高可用性著称。Redis通常用作缓存、队列、实时处理等。 最新发布的Redis 3.0.1版本为我们带来了许多新特性,同时也修复了一些已知问题,使Redis更加稳定可靠。 新特性 Redis 3.0.1版本的新特性包括: 1. 完全感知…

    其他 2023年3月28日
    00
  • 使用Spring Boot Mybatis 搞反向工程的步骤

    使用Spring Boot和Mybatis进行反向工程是一个非常方便的方法,通过几个简单的步骤可以自动生成数据库操作的代码,这里我详细讲解一下具体的步骤。 1. 引入依赖 首先,需要在Maven或Gradle中添加对Spring Boot和Mybatis的依赖。例如,在Maven中可以如下添加: <dependencies> <depend…

    other 2023年6月27日
    00
  • Java一维数组和二维数组元素默认初始化值的判断方式

    Java中数组的元素默认初始化值依赖于数组类型,对于一维数组和二维数组,其元素的默认初始化值有所不同。本文将介绍如何判断数组元素的默认初始化值。 一维数组元素默认初始化值 Java数组的元素默认初始化值如下: 数据类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char ‘\u0000’ …

    other 2023年6月20日
    00
  • c# 类和成员的修饰详细介绍

    C# 类和成员的修饰详细介绍 在C#中,修饰符是用来控制类和成员的访问以及其他行为的关键字。一个类或成员的修饰符可以单个使用,也可以在同一行使用多个修饰符。以下是常用的C#类和成员修饰符以及其含义。 类的修饰符 public public修饰符表示此类对任何类都是可访问的,即在整个应用程序中都可以被使用。 示例代码: public class Example…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部