我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

你要学会:

  • 流的概念
  • 处理字节流的类
  • 处理字符流的类
  • 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流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++超详细梳理lambda和function的使用方法

C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式实质上是创建一个匿名函数/对象,这篇文章主要介绍了lambda和function的使用方法
2022-11-13

Python中JSON的使用方法(超详细)

JSON是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写,这篇文章主要介绍了Python中JSON的基本使用,需要的朋友可以参考下
2022-11-13

Java I/O流之打印流详细使用方法教程

java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作,下面这篇文章主要给大家介绍了关于Java IO流打印流详细使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-31

如何使用 Java 高效读写大文件?(超详细教程)(使用Java读写大文件的方法)

在Java编程中,经常会遇到需要读写大文件的情况。大文件的读写操作需要特别注意性能和效率,以避免程序出现卡顿或内存溢出等问题。本文将详细介绍使用Java读写大文件的方法,帮助你轻松应对大文件处理任务。一、使用缓冲流提高读写效率
如何使用 Java 高效读写大文件?(超详细教程)(使用Java读写大文件的方法)
Java2024-12-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录