java中I/O流之字节流和字符流学习总结(上)

简介: java中I/O流之字节流和字符流学习总结(上)

一、基本内容


如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:


字节流:InputStream(字节输入流)、OutputStream(字节输出流);


字符流:Reader(字符输入流)、Writer(字符输出流);


字节流理解配图


image.png


字符流理解配图


image.png


字节流与字符流操作的本质区别只有一个:字节流是原生的操作,而字符流是经过处理后的操作。


在进行网络数据传输、磁盘数据保存所保存所支持的数据类型只有:字节。

而所有磁盘中的数据必须先读取到内存后才能进行操作,而内存中会帮助我们把字节变为字符。字符更加适合处理中文。

不管使用的是字节流还是字符流,其基本的操作流程几乎是一样的,以文件操作为例。 创建File类对象 ,主要是指明要操作的文件路径;


1.根据字节流或字符流的子类实例化父类对象 ;

2.进行数据的读取或写入操作;

3.关闭流(close());

4.对于IO操作属于资源处理,所有的资源处理操作(IO操作、数据库操作、网络)最后必须要进行关闭。


二、字节输出流:(OutputStream)(重点)


字节输出流主要以操作byte数据为主,观察java.io.OutputStream类的定义结构:

 字节输出流主要以操作byte数据为主,观察java.io.OutputStream类的定义结构:

 public abstract class OutputStream implements Closeable, Flushable

 OutputStream类实现了Closeable,Flushable两个接口,这两个接口中的方法:

    1. Closeable: public void close() throws IOException;

    2. Flushable: public void flush() throws IOException;


image.png


OutputStream类定义有三个重要的输出操作方法:


将给定的字节数组内容全部输出:public void write(byte b[]) throws IOException

将部分字节数组内容输出:public void write(byte b[], int off, int len) throws IOException(重点)

输出单个字节:public abstract void write(int b) throws IOException

OutputStream是一个抽象类,按照抽象类的基本原则来讲,如果想要取得OutputStream类的实例化对象那么一定需要子类,如果要进行文件的操作,可以使用FileOutputStream类来处理,


这个类的构造方法如下:


接收File类(覆盖):public FileOutputStream(File file) throws FileNotFoundException

接收File类(追加):public FileOutputStream(File file, boolean append)

范例:实现文件的输出


package lisy;
import java.awt.print.Printable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Demo {
    public static void main(String[] args) throws IOException {
        //第一步:定义要输出的文件的File类对象
        File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt");
        //输出信息的时候文件可以不存在,但是目录必须存在
        if(!file.getParentFile().exists()) {//父路径不存在
            file.getParentFile().mkdirs();//创建父路径
        }
        //第二步:利用OutputStream的子类为父类进行实例化
        OutputStream output = new FileOutputStream(file);
        //第三步:输出文字信息
        String msg = "富则达济天下,穷则独善其身";//字符串
        //为了方便输出需要将字符串变为字节数组
        byte data[] = msg.getBytes();//变为字节数组
        output.write(data);//输出数据
        output.close();//关闭流
    }
}


输出文件的部分内容 (一个字符两个字节)


output.write(data,0,10);//输出部分数据


使用循环方式进行单个字节的信息输出


for(int x = 0;x < data.length; x++) {
        output.write(data[x]);//单个字节输出数据
        }


我们可以发现,每次执行完成之后所有的内容都被覆盖了。所以也可以进行数据的追加操作

范例:追加数据


OutputStream output = new FileOutputStream(file,true);//此处为追加操作


如果想要进行换行操作,则可以使用“\r\n”表示。


//第三步:输出文字信息
        String msg = "富则达济天下,穷则独善其身。。。\r\n";//字符串



目录
相关文章
|
19天前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
42 5
|
19天前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
94 1
|
1月前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
20天前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
95 5
|
20天前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
133 3
|
20天前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
46 1
|
20天前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
91 1
|
28天前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
89 6
|
25天前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
54 2
|
25天前
|
安全 Java 编译器
Java基础学习day06
本节学习Java继承与多态核心概念:继承通过extends实现,子类可复用父类非私有成员,支持单继承与多层继承,遵循就近原则并可用super调用父类成员;方法重写需满足权限与返回值约束,常用于重写toString等。多态基于继承,实现父类引用指向子类对象,提升扩展性但无法直接访问子类独有方法,可通过instanceof安全类型转换。
90 2

热门文章

最新文章