Java基础教程(12)-Java中的IO流

简介: 【4月更文挑战第12天】Java IO涉及输入输出,包括从外部读取数据到内存(如文件、网络)和从内存输出到外部。流是信息传输的抽象,分为字节流和字符流。字节流处理二进制数据,如InputStream和OutputStream,而字符流处理Unicode字符,如Reader和Writer。File对象用于文件和目录操作,Path对象简化了路径处理。ZipInputStream和ZipOutputStream则用于读写zip文件。

IO是指Input/Output,即输入和输出。以内存为中心:

  • Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等。
  • Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等。

流的输入和输出

Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。所有流的行为具有同样的方式。

一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。

Java 定义了两种类型的流:字节类和字符类。

字节与字符

  • Bit 最小的二进制单位, 是计算机的操作部分。取值 0 或者 1
  • Byte(字节)是计算机操作数据的最小单位由 8 位 bit 组成 取值(-128-127)
  • Char(字符)是用户的可读写的最小单位,在 Java 里面由 16 位 bit 组成 取值(0-65535)

  • 字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或书写二进制数据。

字节流

字节流由两个类层次结构定义。在顶层有两个抽象类InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。

不用缓冲区,直接对文件本身操作。

抽象类InputStream 和 OutputStream定义了实现其他流类的关键方法。最重要的两种方法是read()和write(),它们分别对数据的字节进行读写。两种方法都在InputStream 和OutputStream中被定义为抽象方法。它们被派生的流类重载。

System.in是标准输入,默认情况下,它指的是键盘。System.out是标准的输出流。System.err指的是标准错误流,它默认是控制台。
System.in 是inputStream的对象;System.out和System.err是PrintStream的对象。它们都是字节流;

字符流

  • 字符流(character stream)为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化.

字符流类由两个类层次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。抽象类Reader和Writer定义了几个实现其他流类的关键方法。其中两个最重要的是read()和write(),它们分别进行字符数据的读和写。这些方法被派生流类重载。

;使用缓冲区缓冲字符,不关闭流就不会输出任何内容。

  • 互相转换

    OutputStreamWriter:是 Writer 的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。
    InputStreamReader:是 Reader 的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。

File对象

Java的标准库 java.io 提供了 File 对象来操作文件和目录。

构造File对象时,既可以传入绝对路径,也可以传入相对路径。绝对路径是以根目录开头的完整路径; 传入相对路径时,相对路径前面加上当前目录就是绝对路径;

File 对象既可以表示文件,也可以表示目录。特别要注意的是,构造一个 File 对象,即使传入的文件或目录不存在,代码也不会出错,因为构造一个 File 对象,并不会导致任何磁盘操作。只有当我们调用 File 对象的某些方法的时候,才真正进行磁盘操作。

package com.demo;

import java.io.File;

public class IOStudy {
   
   

    public static void main(String[] args) throws Throwable{
   
   
        File file =  new File("C:\\Users\\Administrator/Desktop/dyxz.txt");
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.exists());
    }
}
AI 代码解读

Java标准库还提供了一个 Path 对象,它位于 java.nio.file 包。 Path 对象和 File 对象类似,但操作更加简单

ZipInputStream和ZipOutputStream

  • 读取zip文件:

    创建一个 ZipInputStream ,通常是传入一个 FileInputStream 作为数据源,然后,循环调用 getNextEntry() ,直到返回 null ,表示zip流结束。
    一个 ZipEntry 表示一个压缩文件或目录,如果是压缩文件,我们就用 read() 方法不断读取,直到返回 -1 。

在这里插入图片描述

  • 写入zip

ZipOutputStream 是一种 FilterOutputStream ,它可以直接写入内容到zip包。我们要先创建一个 ZipOutputStream ,通常是包装一个 FileOutputStream ,然后,每写入一个文件前,先调用putNextEntry() ,然后用 write() 写入 byte[] 数据,写入完毕后调
用 closeEntry() 结束这个文件的打包;

在这里插入图片描述

JarInputStream 是从 ZipInputStream 派生,它增加的主要功能是直接读取jar文件里面的 MANIFEST.MF 文件

目录
打赏
0
1
2
0
1634
分享
相关文章
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
160 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
自研Java框架 Sunrays-Framework使用教程「博客之星」
### Sunrays-Framework:助力高效开发的Java微服务框架 **Sunrays-Framework** 是一款基于 Spring Boot 构建的高效微服务开发框架,深度融合了 Spring Cloud 生态中的核心技术组件。它旨在简化数据访问、缓存管理、消息队列、文件存储等常见开发任务,帮助开发者快速构建高质量的企业级应用。 #### 核心功能 - **MyBatis-Plus**:简化数据访问层开发,提供强大的 CRUD 操作和分页功能。 - **Redis**:实现高性能缓存和分布式锁,提升系统响应速度。 - **RabbitMQ**:可靠的消息队列支持,适用于异步
自研Java框架 Sunrays-Framework使用教程「博客之星」
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
探究Java异常处理【保姆级教程】
Java 异常处理是确保程序稳健运行的关键机制。它通过捕获和处理运行时错误,避免程序崩溃。Java 的异常体系以 `Throwable` 为基础,分为 `Error` 和 `Exception`。前者表示严重错误,后者可细分为受检和非受检异常。常见的异常处理方式包括 `try-catch-finally`、`throws` 和 `throw` 关键字。此外,还可以自定义异常类以满足特定需求。最佳实践包括捕获具体异常、合理使用 `finally` 块和谨慎抛出异常。掌握这些技巧能显著提升程序的健壮性和可靠性。
48 4
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
53 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1527 2
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
40 0
4月7日云栖精选夜读:给 Java 学习者的超全教程整理
作为Java程序员的我们,应该不仅对这门语言有所了解,而且我们在平常编程时也需要使用众多的库。比如小编知道的,如果要学习Java Web的话,SSH(Spring, Struts和Hibernate)肯定得会吧,或者至少了解基本的原理吧。
2779 0
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
56 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
40 13

热门文章

最新文章