浅谈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日

相关文章

  • Android中点击事件的四种写法详解

    Android中点击事件的四种写法详解 在Android开发中,处理点击事件是非常常见的需求。Android提供了多种方式来实现点击事件的处理,下面将详细介绍四种常用的写法。 1. 在XML布局文件中设置点击事件 在XML布局文件中,可以直接为控件设置点击事件。首先,在需要设置点击事件的控件上添加android:onClick属性,并指定一个方法名作为点击事…

    other 2023年9月6日
    00
  • socket.on的用法

    问题描述 在使用Socket.io进行实时通信时,如何使用socket.on()方法收服务器发送的消息? 解决案 以下是使用socket.on()方法接收服务器发送的消息的解决方案: 方案1:使用匿名函数 可以使用匿名函数来接收服务器发送的消息。具体步骤如下: 在客户端代码中,使用socket.on()方法监听服务器发送的消息,并使用匿名函数处理消息: so…

    other 2023年5月7日
    00
  • Golang库插件注册加载机制的问题

    Golang库插件注册加载机制是指在golang中如何动态地加载外部的库和插件,并在程序运行时使用。下面是详细的攻略: 加载外部库 要加载外部的库,可以使用golang的标准库plugin。 plugin包提供了在程序运行时动态加载Go插件的功能。 使用plugin包,首先需要使用plugin.Open函数打开要加载的插件,然后使用plugin.Lookup…

    other 2023年6月25日
    00
  • 浅谈VC中预编译的头文件放那里的问题分析

    我很乐意为大家提供有关“浅谈VC中预编译的头文件放那里的问题分析”的完整攻略。首先,我们需要明确,预编译头文件(Precompiled Header,PCH)是一种提高编译速度和性能的技术,将头文件预编译成一个二进制文件,并在后续编译过程中重复使用,而不是每次都重新编译头文件。那么,在VC中,预编译头文件应该放在哪里呢? 一般来说,VC的预编译头文件应该放在…

    other 2023年6月27日
    00
  • mysql 按中文字段排序

    当我们使用 MySQL 数据库存储中文数据时,可能需要对中文字段(例如姓名、地区等)进行排序操作。这时候,在默认情况下,MySQL 的排序规则是按照 ASCII 码值进行排序,无法对中文排序得到正确的结果。因此,我们需要采用特定的排序方法,才能正确地对中文字段进行排序。 下面是按中文字段排序的完整攻略: 1. 修改表的默认字符集 中文排序需要使用utf8mb…

    other 2023年6月25日
    00
  • 关于go:在golang中为struct字段指定默认值

    以下是关于在Golang中为struct字段指定默认值的完整攻略,包括基本知识和两个示例。 基本知识 在Golang中,可以为struct字段指定默认值。这样,在创建struct实例时,如果没有为该字段指定值,则会使用默认值。在Golang中为struct字段指定默认值需要以下步骤: 在struct定义中为字段指定默认值 创建struct实例时,如果没有为该…

    other 2023年5月7日
    00
  • rancher2.0快速入门

    Rancher 2.0 快速入门 Rancher 2.0 是一个开源的容器管理平台,可以简化 Kubernetes 集群的部署和管理。它提供了一个易于使用的 Web 界面,可以创建、管理和监控 Kubernetes 集群。本篇文章将介绍如何快速入门 Rancher 2.0。 前置条件 在开始 Rancher 2.0 的快速入门之前,您需要了解以下概念/技术:…

    其他 2023年3月28日
    00
  • vue左侧菜单,树形图递归实现代码

    下面我将详细讲解vue左侧菜单、树形图递归实现的完整攻略。 一、什么是递归 在开始讲解之前,我们需要了解什么是递归。递归是指通过函数体内调用自己的方式,重复执行某段代码的过程。 二、vue左侧菜单代码实现 1. 父组件 我们需要先创建一个父组件,来渲染整个左侧菜单。 <template> <div class="menu&quot…

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