Java超详细梳理IO流的使用方法上

目录
  • Java语言的输入输出类库
    • 1.流的概念
    • 2.流的分类
    • 3.流的作用
    • 4.输入输出流类库
  • 使用InputStream和OutputStream流类
    • 1.基本输入输出流
      • 1.InpitStream流类
      • 2.OutputStream流类
    • 2.输入输出流的应用
      • 2.1文件输入输出流
      • 2.2顺序输入流
      • 2.3管道输入输出流
      • 2.4过滤输入输出流
      • 2.5标准输入输出

你要学会:

  • 流的概念
  • 处理字节流的类
  • 处理字符流的类
  • Java标准输入输出
  • 文件管理类

Java语言的输入输出类库

1.流的概念

流是指计算机各部件之间的数据流动。可以是原始的二进制数据,也可以是编码后的特定数据。

2.流的分类

按照数据的传输方法,流分为输出流和输入流。按照内容区分为字节流和字符流。

3.流的作用

用户可以通过流来读写数据。

输入输出流

Java中把不同的输入输出源(文件,屏幕,键盘等)抽象为流,输入输出的数据称为数据流,数据流是Java程序接收和发送数据的一个通道。把数据从键盘等外设传递到程序称为输入流,输入流只能从其读取数据而不能向其写入数据,输出流类似。

数据的接收和发送都是沿着数据序列顺序进行的,每一个数据都要等待前面的数据读入或者送出才能进行读写。

缓冲流

数据流中的每次操作都是以字节为单位的,为了提高数据传输效率,通常使用缓冲流。缓冲流就是为一个已有的流配上一个缓冲区。例如写入数据时,数据会先发送到缓冲区,当缓冲区满时,在发送到外部设备。

4.输入输出流类库

  • Java语言的输入输出流都封装在java.io包中,使用前要先导包。用户可以选择包里的不同的流类实现各种数据的输入输出。其中字节流每次读取8位二进制数,不能分解,重组和理解这些数据,所以可以恢复到原来有意义的状态。
  • 字符流每次读取16位二进制数,将其作为一个字符处理。字符流的源或目标通常是文本文件,Java语言使用的是Unicode编码,字符流可以实现程序内部格式与文本文件,显示输出等外部格式的转换。
  • 在java.io中有四个类:

  • InputStream等四个类是抽象类,用于数据的输入输出。不能直接使用,因为不能表明具体对应哪一种输入输出设备,更体现了输入输出操作独立与相关设备。File是文件类,用于磁盘文件与文件夹的管理。RandomAccessFile是随机访问文件类,用于实现对磁盘文件的随机读写操作。
  • 字节流类通常被用来读写图片视频等二进制数据,但也可以用来处理文本文件,字符流类通常用来处理文本文件。由于字节流不能直接操作Unicode编码,因此不提倡使用字节流读取文本文件,因为当文件中有汉字时可能会出现乱码。

使用InputStream和OutputStream流类

下面流类的构造方法和常用方法参见Java api

1.基本输入输出流

1.InpitStream流类

  • InputStream流类中包含了一套所有字节输入都需要的方法,可以完成从输入流读入数据的操作。
  • 当程序从键盘磁盘文件等外设读入数据时,要先创建一个子类的对象来与外设连接,再调用该对象继承的read()方法实现输入操作。流中的方法都声明抛出异常,所以程序中调用流方法时要处理异常,否则编译不通过。

2.OutputStream流类

  • OutputStream类中包含了一套所有字节输出都需要的方法,可以完成从输出流写入数据的操作。
  • 当程序向屏幕磁盘文件等外设输入数据时,要先创建一个子类对象来与外设连接,再调用该对象继承的write()方法实现输出操作。

2.输入输出流的应用

InputStream类和OutputStream类时抽象类,具体实现输入输出操作时要派生出不同的子类,用于不同情况数据的输入输出操作。一起来学习这些类趴:

2.1文件输入输出流

  • FileInputStream和FileOutputStream流负责本地磁盘的文件的顺序输入输出操作。
  • FileInputStream类的对象表示文件字节输入流,从中可以读取数据。 在生成该类的对象时若找不到指定文件,则一定会抛出FileNotFoundException异常。该异常必须捕获或者声明抛出。
  • FileOutputStream类的对象表示文件字节输出流,可向流中写入数据。在生成该类的对象时若找不到文件则创建一个新文件,若已存在,则清除原文件的内容。在进行文件读写操作时会产生IOException异常,该异常必须捕获或声明抛出。
  • 其中File是java.io包中的类,每个File对象表示一个磁盘文件或者文件夹,其中属性包含了文件夹的名称长度等信息。
  • 无论哪一个构造方法,在创建文件输入输出流时都可能因为文件名不对,路径不对,属性不对等无法打开文件造成错误,抛出FileNotFoundException异常,执行writer()和reader()方法时因为IO错误抛出IOException异常。所以输入输出流并调用构造方法以及执行读写操作的语句应放在try语句块中,并由相应的catch语句捕获异常。
  • FileDescriptor是该包中的另一个类,不能实例化。其中有三个静态成员变量in,out,err。分别是标准输入输出流,标准错误流,可以利用它们实现键盘输入屏幕输出。

2.2顺序输入流

顺序输入流SequenceInputStream是将多个输入流顺序连接在一起,形成单一的数据输入流,没有对应的数据输出流。在输入数据时,顺序输入流依次打开每个输入流并读取数据。直到最后一个输入流读取到EOF时为止。

2.3管道输入输出流

  • 管道输入输出流为了实现程序内部线程间的通信或者不同程序的通信,这两个类要结合使用,输入流作为接受端,输出流做为发送端。
  • 管道字节输入流PipedInputStream类和管道字节输出流PipedOutputStream类提供了管道的方式数据输入输出管理类。

2.4过滤输入输出流

  • 过滤字节输入输出流时建立在基本输入输出流之上的,在输入输出数据时可以对数据做类型和格式的转换,即可以对二进制字节数据理解和编码转换。
  • 过滤字节输入流FilterInputStream和过滤字节输出流FilterOutputStream可以在数据读写的同时实现数据操作。是上面两个类的直接子类,也属于抽象类,被DateInputStream和DateOutputStream继承。
  • 有时候我们并不希望数据的传输以字节为基本单位,如一个二进制文件存放的是整型数据,我们希望按照int为基本单位进行数据传输。这两个过滤流可以将基本数据输入输出流转换为基本数据类型的过滤流。

2.5标准输入输出

  • 前面说到的,在一般操作时,要先创建一个输入输出的实例化对象,完成与外设的连接,但是在与标准的输入输出设备连接时不用这样。
  • Java系统实现在java.lang.System包中定义了静态流对象,输入流System.in,一般指键盘。输出流System.out,一般指屏幕。标准错误输出设备System.err使程序运行错误时有日志等固定输出位置。
  • (1)标准输入,System.in是BufferedInputStream的对象,当程序从键盘读入数据时,调用System.in的read方法,从缓冲区读入一个二进制数据。使用时包含在try语句中,并捕获或者抛出异常。
  • (2)标准输出:System.out是打印输出流PrintStream的对象。PrintStream类是过滤字节输出流FilterOutputStream的一个子类,定义了print和println等不同的方法向屏幕输出。
  • (3)标准错误流:System.err用于显示用户错误信息,是由PrintStream派生的类,作用是利用print把错误打印到屏幕上。使用与out同样的方法:

例如System.err.print("错误")

代码示例:

import java.io.*;
public class A_2 {
    public static void main(String[] args){
        try{
            byte[] b=new byte[128];
            System.out.print("请输入字符:");
            int count=System.in.read(b);
            System.out.print("输入的是:");
            for(int i=0;i<count;i++){
                System.out.print(b[i]+" ");
                System.out.println();
            }
            class InClass=System.in.getClass();
            class OutClass=System.out.getClass();
        }
    }
}

到此这篇关于Java超详细梳理IO流的使用方法上的文章就介绍到这了,更多相关Java IO流内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中文件的读写方法之IO流详解

    目录 1.File类 1.1File类概述和构造方法 1.2File类创建功能 1.3File类判断和获取功能 1.4File类删除功能 2.递归 2.1递归 2.2递归求阶乘 2.3递归遍历目录 3.IO流 3.1 IO流概述和分类 3.2字节流写数据 3.3字节流写数据的三种方式 3.4字节流写数据的两个小问题 3.5字节流写数据加异常处理 3.6字节流读数据(一次读一个字节数据) 3.7字节流复制文本文件 3.8字节流读数据(一次读一个字节数组数据) 3.9字节流复制图片 总结 1.Fil

  • Java IO流之StringWriter和StringReader用法分析

    简介 StringWriter和StringReader分别继承自Writer和Reader抽象类,作用就是将字符串String类型适配到StringWriter和StringReader类. 其中StringWriter实际上是用StringBuffer实现的,StringBuffer是一个线程安全的类,实际上默认的是16个字符的char数组.所以通过方法write()和append()等其他重载的方法.将字符串添加到StringBuffer中,可以调用toString()或者getBuffe

  • Java文件操作之IO流 File类的使用详解

    File类概述 File类能新建.删除.重命名文件和目录,但不能访问文件内容本身,如果需要访问文件内容本身,则需要使用后续的输入/输出流. 要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录. File对象可以作为参数传递给流的构造器. 常用构造器 ①public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果是相对路径,则默认相

  • Java详解IO流创建读取与写入操作

    目录 概念 io流对应的方法 一.File方法(创建文件) 二.FileInputStream(获取字节方法)输入流 三.FileOutputStream(写入字节方法)输出流 总结 概念 IO流可以初步的理解为数据间的传输,我们将一组数据入:1234567,将他们从hello文件中转入haha文件中,使用程序的方法进行转入的话则需要一个一个的传入,即为一个字节一个字节的传输,我们每次只能传入或读取一个字节,这就是io流的大致流程,io流对任何类型的文件都可以进行读取.如:文本文件,图片,歌曲m

  • Java详细讲解IO流的Writer与Reader操作

    目录 接口连接 一.Writer方法 二.Reader方法 接口连接 public static void main(String[] args) throws Exception io流的所有方法都需要链接他们的接口父类,Exception. 一.Writer方法 方法引入: Writer Writer = new FileWriter("D:\\java制作\\高级特性\\src\\com\\ytzl\\第二章\\demo4\\io流\\two\\FileWriter方法.txt"

  • Java超详细梳理IO流的使用方法上

    目录 Java语言的输入输出类库 1.流的概念 2.流的分类 3.流的作用 4.输入输出流类库 使用InputStream和OutputStream流类 1.基本输入输出流 1.InpitStream流类 2.OutputStream流类 2.输入输出流的应用 2.1文件输入输出流 2.2顺序输入流 2.3管道输入输出流 2.4过滤输入输出流 2.5标准输入输出 你要学会: 流的概念 处理字节流的类 处理字符流的类 Java标准输入输出 文件管理类 Java语言的输入输出类库 1.流的概念 流是

  • C++超详细梳理IO流操作

    目录 1.标准输出输入流-控制台流(iostream类) 2. 文件流(I/O操作) 文本文件 使用<< >> 进行读写 getline()读取一行 get() put()进行单个字符读写 二进制文件读写 get() put()进行单个字节读写 read() write()多个字节读写 注意事项 3.字符串输入输出流(sstream) sprintf sscanf 和 stringstream的使用 补充内容:C/C++中int和字符串类型的转换 string转int int转st

  • Java 超详细讲解IO操作字节流与字符流

    目录 IO操作 字节流 FileInputStream FileOutputStream 字节流读写案例 字符流 FileReader FileWriter 字节流与字符流的区别 IO操作 字节流 java.io.InputStream 输入流,主要是用来读取文件内容的. java.io.OutputStream 输出流,主要是用来将内容字节写入文件的. FileInputStream 该流用于从文件读取数据,它的对象可以用关键字 new 来创建. 有多种构造方法可用来创建对象. 可以使用字符串

  • Java超详细梳理异常处理机制

    目录 一.异常概述与异常体系结构 1. 异常概述 引入 概念 2. 分类 2.1 Error vs Exception 2.2 编译时异常vs运行时异常 3. 常见异常 3.1 分类 3.2 代码演示 二.异常处理机制 1. 概述 2. 异常处理机制一之try-catch-finally 2.1 语法格式 2.2 使用 2.3 代码演示 3. 异常处理机制二之声明抛出异常throws 3.1 语法格式 3.2 使用 4. try-catch-finally与throws的区别 5. 手动抛出异常

  • Java 超详细讲解字符流

    目录 一.字符流的由来 二.编码表 字符集: Unicode字符集: UTF-8编码规则: 三.字符串中的编码解码问题 编码方法(IDEA): 解码方法(IDEA): 四.字符流的编码解码问题 四.字符流写数据的五种方法 五.字符流读数据的两种方法 一.字符流的由来 由于使用字节流操控中文时不是很方便,Java就提供了字符流来进行操控中文 实现原理:字节流+编码表 为什么用字节流进行复制带有中文的文本文件时没有问题? 因为底层操作会自动进行字节拼接成中文 怎样识别该字节是中文呢? 汉字在存储时,

  • Java 继承与多态超详细梳理

    目录 一.继承 1.继承的概念 2.继承的语法 3.父类成员访问 (1)子类中访问父类的成员变量 (2)子类中访问父类的成员方法 4.super关键字 5.子类构造方法 6.super和this 7.代码块执行顺序 8.继承方式 9.final关键字 10.继承和组合 二.多态 1.向上转型 2.重写 3.多态 一.继承 1.继承的概念 继承机制:是面向对象程序设计是代码可以复用的最重要手段,允许程序员在保持原有类特性的基础上进行扩展,增加新的功能,产生的新类,成为派生类/子类.继承主要解决的问

  • C++ 超详细梳理继承的概念与使用

    目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 复杂的菱形继承及菱形虚拟继承 菱形继承 虚拟继承解决数据冗余和二义性的原理 继承的总结和反思 继承的概念及定义 继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体

  • Java超详细讲解SpringMVC如何获取请求数据

    目录 1.获得请求参数 1)基本类型参数:​​​​​​​   2)POJO类型参数: 3)数组类型参数   4)集合类型参数   2.请求乱码问题 3.参数绑注解@RequestParam​​​​​​​ 4.获得Restful风格的参数 5.自定义类型转换器 6.获得请求头 7.文件上传 8.小结 1.获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 1)基本类型

  • Java 超详细讲解数据结构的应用

    目录 一.bfs 二.双端队列 三.算法题 1.kotori和迷宫 2.小红找红点 3.小红玩数组  一.bfs bfs(广度优先搜索),类似二叉树的层序遍历,利用队列完成.一般用于求最短路. 图的最短路问题: 给定一个无向图,每条边的长度都是1.求1号点到x号点的最短距离. 顶点数n  边数为m q次询问  输入x 输出1到x的最短距离. 若1号点到x不连通,则输出-1 二.双端队列 双端队列的应用(区间翻转): 对于长度为n的数组,给定一个长度为m的区间,区间初始位置为a[1]到a[m].

随机推荐