第08讲 IO流
Java基础:IO流之字节流和字符流
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 基础:IO 流之字节流和字符流2016/10/15 9461. 流的概念流(stream)的概念源于UNIX 中管道(pipe)的概念。
在UNIX 中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet 上的某个URL。
流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。
用户可以从输入流中读取信息,但不能写它。
相反,对输出流,只能往输入流写,而不能读它。
实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。
形象的比喻——水流,文件======程序,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流:流就是一个管道里面有流水,这个管道连接了文件和程序。
2. IO 流概述大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。
在Java 中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。
Java 中的“流”都位于Java.io 包中,称之为IO(输入输出)流。
IO 流:即InputOutput 的缩写。
输入流和输出流相对于内存设备而言。
将外设中的数据读取到内存中:输入。
将内存的数写入到外设中:输出。
IO 流的特点:IO 流用来处理设备间的数据传输。
Java 对数据的操作是通过流的方式。
Java 用于操作流的对象都在IO 包中。
流按操作数据分为两种:字节流和字符流。
流按流向。
java io流的用法 -回复
java io流的用法-回复Java中的I/O流是一种用于输入和输出数据的机制。
它允许我们通过文件、网络、内存等不同的源和目标进行数据交换。
I/O流在编程中扮演着重要角色,被广泛应用于文件操作、网络通信和数据处理等场景中。
本文将一步一步回答有关Java I/O流的用法。
第一步:了解I/O流的概念和分类I/O流(Input/Output stream)是用于读取和写入数据的抽象机制。
在Java中,I/O流被分为两种类型:字节流和字符流。
字节流以字节为单位进行操作,适用于处理二进制数据和字节流媒体;而字符流以字符为单位进行操作,适用于处理文本数据。
字节流包括InputStream和OutputStream,其中InputStream用于从输入源读取数据,而OutputStream用于向输出目标写入数据。
常见的字节流包括FileInputStream、FileOutputStream和ByteArrayInputStream等。
字符流包括Reader和Writer,其中Reader用于从输入源读取字符数据,而Writer用于向输出目标写入字符数据。
常见的字符流包括FileReader、FileWriter和BufferedReader等。
第二步:使用字节流进行文件操作在使用字节流进行文件操作之前,首先需要创建一个文件。
可以使用File 类来创建或者引用一个文件对象,然后使用字节流进行读写操作。
读取文件的过程如下:1. 创建一个FileInputStream对象,并将要读取的文件作为参数传递给它。
例如:FileInputStream fis = new FileInputStream("example.txt");2. 创建一个字节数组用于存储读取的数据。
例如:byte[] data = new byte[1024];3. 调用FileInputStream对象的read()方法读取数据,并将读取的数据保存到字节数组中。
io流之字节流和字符流详解
IO流之字节流和字符流详解IO(Input output)流,分为两种:字节流和字符流字节流的两个基类:InputStream(读)OutStream(写)字符流的两个基类:Reader(读)Writer(写)字符流写(FileWriter)和读(FileReader)写(FileWriter)我们知道既然IO流是用于操作数据的,那么数据的最常见的体现形式是:文件我们使用一个操作文件的Writer子类是FileWriter。
我们要查Writer API时注意:后缀名是父类名,前缀名是是该流对象的功能。
我们来首先来看看Writer基类的几种常用方法:a)public void write(String str) throws IOException: 写入字符串b)public abstract void flush()throws IOException:刷新该流的缓冲c)public abstract void close()throws IOException:关闭该流,但先刷新对于如何创建一个字符Writer流,我们来详细看看如下代码:import java.io.*;class FileWriterDemo{public static void main(String[] args) throws IOException{//创建一个FileWriter对象,//该对象一旦被创建就必须明确要被操作的文件//而且该文件会被创建到指定目录下//如果该目录下已有同名文件,将被覆盖//其实改不就是在明确数据要存放的目的地FileWriter fw=new FileWriter("demo.txt");//调用write方法,将字符串写入到流中fw.write("abcde");//刷新流对象中的缓冲中数据//将数据刷到目的地中,即将数据保存到目的地//fw.flush();//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据//将数据刷到目的地中//和flush区别:flush刷新后,流可以继续使用,close刷新后,流会关闭fw.close();}}IO异常(IOException)的处理方式:我们对与Io出现的异常不能抛,我们要自己解决,我们如何去处理一个IO异常呢?我们用代码演示一遍:import java.io.*;class IOExceptionDemo{public static void main(String[] args){//我们首先创建类型的变量并作用于整个域FileWriter fw=null;try{fw=new FileWriter("k://demo.txt");fw.write("xixi");}catch(IOException e){//此处是对异常的处理System.out.println("catch:"+e);}finally{try{//我们要首先判断对象是否为空,//此处对象异常不能让用户看到if(fw!=null)//close方法必须要单独try,且放在Finally语句中fw.close();}catch(IOException e){}}}}我们如何对数据进行续写?我们就要使用到FileWriter的另一个构造方法。
io流的面试题
io流的面试题在Java编程中,IO流是一个非常重要的概念。
在面试过程中,经常会涉及到与IO流相关的问题。
本文将介绍一些常见的IO流面试题,并给出相应的解答。
以下是一些常见的问题和答案:1. 什么是IO流?IO流是用于处理输入输出的机制,它是Java程序与外部世界进行数据交换的方式。
输入流用于从外部读取数据,输出流用于向外部写入数据。
2. IO流的分类有哪些?IO流可以分为字节流和字符流。
字节流以字节为单位进行读写,而字符流以字符为单位进行读写。
字节流可以处理任意类型的数据,而字符流主要用于处理文本数据。
3. 文件读写时,常用的字节流和字符流是什么?常用的字节流是InputStream和OutputStream,常用的字符流是Reader和Writer。
它们都是抽象类,具体的实现类有很多,如FileInputStream、FileOutputStream、FileReader和FileWriter。
4. 如何使用字节流进行文件复制?使用字节流进行文件复制可以通过以下步骤实现:- 创建一个输入流对象,用于读取源文件;- 创建一个输出流对象,用于写入目标文件;- 使用循环读取字节,并将其写入输出流,直到读取到文件末尾;- 关闭输入流和输出流。
5. 如何使用字符流进行文件复制?使用字符流进行文件复制可以通过以下步骤实现:- 创建一个输入流对象,用于读取源文件;- 创建一个输出流对象,用于写入目标文件;- 使用循环读取字符,并将其写入输出流,直到读取到文件末尾;- 关闭输入流和输出流。
6. 什么是缓冲流?为什么要使用缓冲流?缓冲流是对字节流和字符流的包装,通过内部的缓冲区提高了读写的效率。
使用缓冲流可以减少对操作系统的IO次数,提高程序的性能。
7. 缓冲流的使用方法是什么?缓冲流的使用方法如下:- 创建一个字节流或字符流的对象;- 创建一个缓冲流的对象,将字节流或字符流对象作为参数传入;- 使用缓冲流来读写数据;- 关闭缓冲流,它会自动关闭内部的字节流或字符流。
IO流笔记
JAVA流技术(IO编程)流的作用:如何从能够发送字节序列的任何数据源取得输入,以及如何将输出发送到能够接收字节序列的任何目的地。
即:输入/输出问题。
字节序列的源和目的地可以是文件、网络连接、内存块等,存储在文件中的信息和从网络连接中接收的信息,从本质上处理方法是相同的。
数据最终都保存为一个字节序列,但是在程序设计中应当用更高级的数据结构来处理,如字符或对象序列等。
java.io 包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:按数据流的方向不同可以分为输入流和输出流。
(以程序的角度来考虑)按处理数据单位不同可以分为字节流和字符流。
按照功能不同可以分为节点流和处理流。
J2SDK 所提供的所有流类型位于包java.io内都分别继承自以下四种抽象流类型。
节点流和处理流:节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
InputStream继承自InputSteam的流都是用于向程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。
InputStream的基本方法读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾。
int read() throws IOException读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1int read(byte[] buffer) throws IOException读取length个字节并存储到一个字节数组buffer,从off位置开始存,最多len返回实际读取的字节数,如果读取前以到输入流的末尾返回-1int read(byte[] buffer, int off, int len)throws IOException关闭流释放内存资源void close() throws IOExceptionOutputStream继承自OutputSteam的流是用于程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。
java io流的工作原理
java io流的工作原理Java IO流的工作原理什么是Java IO流Java IO流是Java中用于输入输出操作的重要组成部分。
IO流可以用来读取输入源的数据、写入到输出目标中,提供了丰富灵活的操作方式。
IO流的分类Java IO流可以分为以下两类:•字节流:以字节为单位进行操作,适用于处理二进制数据。
•字符流:以字符为单位进行操作,适用于处理文本数据。
IO流的基本工作原理Java IO流的工作原理可以归纳为以下步骤:1.打开流:使用合适的构造方法打开输入流或输出流。
2.读取或写入数据:通过流对象提供的方法对数据进行读取或写入操作。
3.关闭流:使用流对象的close()方法关闭流,释放资源。
InputStream•基类:``•功能:以字节为单位从输入源中读取数据字节输入流的工作原理可以分为以下步骤:1.打开输入流:使用合适的构造方法打开输入流。
2.读取数据:使用输入流对象的read()方法读取数据。
3.处理数据:对读取到的字节数据进行相应的操作。
4.判断是否读取到数据末尾:根据返回值判断是否读取到数据末尾。
5.关闭输入流:使用输入流对象的close()方法关闭输入流。
OutputStream•基类:``•功能:以字节为单位将数据写入到输出目标中字节输出流的工作原理可以分为以下步骤:1.打开输出流:使用合适的构造方法打开输出流。
2.写入数据:使用输出流对象的write()方法写入数据。
3.关闭输出流:使用输出流对象的close()方法关闭输出流。
Reader•基类:``•功能:以字符为单位从输入源中读取数据字符输入流的工作原理可以分为以下步骤:1.打开输入流:使用合适的构造方法打开输入流。
2.读取数据:使用输入流对象的read()方法读取数据。
3.处理数据:对读取到的字符数据进行相应的操作。
4.判断是否读取到数据末尾:根据返回值判断是否读取到数据末尾。
5.关闭输入流:使用输入流对象的close()方法关闭输入流。
黑马程序员小鲁哥哥白话笔记-IO流
小鲁哥哥白话笔记-IO流大家在学到IO流的时候,向是突然见到了新世界一样,一下子多了好多不认识的类,各种名字和各种用法一下就把大家给绕晕了,不知道思路从何整理。
下边以小鲁哥哥的视角带大家去看看小鲁哥哥是怎么去理解这些复杂和繁多的知识的。
首先我们先给IO流定一个大的框架,在一点点去给他拆分,这样我们就容易理解了。
IO流的分类(我们只按数据类型分类,这是学生问的最多的问题,如何去区分数据类型):字节流:InputStream,OutputStream字符流:Reader,Writer有的同学就问了,是不是后缀带Stream的都是字节流,以(Reader或Writer)结尾的都是字符流?有的同学就问了OutputStreamWriter即带Stream又带Writer那这个是什么流?如果按我们同学说的只看后缀的话,那它是字符流,对,它就是一个字符流。
他是负责把字节流转换成字符流的一个桥梁,行家都叫它“转换流”。
给大家看一看IO流的一些例子:publicclass OutputStreamWriterDemo {publicstaticvoid main(String[] args) throws IOException {//method2();//创建输入流对象BufferedReaderbr = new BufferedReader(new FileReader("SystemInOutDemo.java"));//创建输出流对象//OutputStreamos = System.out;//Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象//BufferedWriterbw = new BufferedWriter(w);BufferedWriterbw = new BufferedWriter(new OutputStreamWriter(System.out));//进行数据的读写String line;//用于存储读取到的数据while((line = br.readLine()) != null) {bw.write(line);bw.newLine();}//释放资源bw.close();br.close();}privatestaticvoid method2() throws FileNotFoundException, IOException { //创建输入流对象BufferedReaderbr = new BufferedReader(new FileReader("SystemInOutDemo.java"));//创建输出流对象//OutputStreamos = System.out;Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象//进行数据的读写String line;//用于存储读取到的数据while((line = br.readLine()) != null) {w.write(line);w.write("\r\n");}//释放资源w.close();br.close();}privatestaticvoid method() throws FileNotFoundException, IOException { //创建输入流对象BufferedReaderbr = new BufferedReader(new FileReader("SystemInOutDemo.java"));//创建输出流对象OutputStreamos = System.out;String line;//用于存储读取到的数据while((line =br.readLine()) != null) {os.write(line.getBytes());os.write("\r\n".getBytes());}//释放资源os.close();br.close();}}上述例子就是转换流的例子,其实大多数的流操作都是一样的,大家在写代码的时候,脑子里要有一个声音,IO流最后要关掉,释放资源。
java,io流学习总结
java,io流学习总结(文章一):Java之IO流学习总结Java之IO流学习总结(一)、什么是流?流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件、内存、IO设备等数据的流向。
而IO流就是用于处理设备上的数据,如:硬盘、内存、键盘录入等。
IO流根据处理类型的不同可分为字节流和字符流,根据流向的不同可分为输入流和输出流。
(二)、字节流和字符流的区别:字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。
它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp(3)、wav等等,而字符流只能处理字符数据。
所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。
(三)、IO体系,所具备的基本功能就是读和写:1.字符流|-- Reader(读)|-- Writer(写)Reader |--InputStreamReader|--FileReader:用于处理文件的字符读取流对象Writer |--OutputStreamWriter |--FileWriter:用于处理文件的字符写入流对象其实很容易就可以看出来,IO体系中的子类名后缀绝大部分是父类名称,而前缀则是体现子类特有功能的名称。
Reader中常见的方法:|--int read() 读取一个字符,并返回读到的这个字符,读到流的末尾则返回-1。
|--int read(char[]) 将读到的字符存入指定的数组中,返回的是读到的字符个数,读到流的末尾则返回-1。
IO流系统总结
IO 知识要点总结主讲:陈静君一、IO流的特点及相关问题● IO流用来处理设备之间的数据传输设备:硬盘,内存,键盘录入● Java对数据的操作是通过流的方式● Java用于操作流的对象都在IO包中● 流按操作数据分为两种:字节流与字符流。
● 流按流向分为:输入流,输出流。
1、输入流和输出流的流向的理解?流就是处理数据的一种方式或者一种手段,或者理解为一种数据流。
从硬盘已有的数据读取出来放内存里面的这个过程就是输入流。
外部--------->内存输入流读把内存中的数据存储到硬盘中的这个过程就是输出流。
内存--------->外部输出流写简单理解就是:以内存为中心。
2、什么时候使用流对象?操作设备上的数据或操作文件的时候可以使用。
二、字符流字符流的抽象基类:Reader &Writer1、字符流的理解,由来和作用?由于很多国家的文字融入进来,比如说中文在编码表中默认占2个字节。
(在UTF-8中是3个字节)而为了按照文字的单位来处理,所以出现了字符流。
由来:后期编码表的不断出现,识别某一文字的码表不唯一。
比如中文,GBK&unicode都可以识别,就出现了编码问题,为了处理文字数据,就需要通过早期的字节流+编码表结合完成。
作用:为了更便于操作文字数据。
结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都是用字节流。
2、IO分类按照功能进行分类---------->读和写IO体系中的子类名称后缀大部分都是父类名称,而前缀都是体现子类功能的名字3、字符流继承体系图4、Reader中的常见方法✓ int read():读取一个字符。
返回的是读到的那个字符(0-65535),如果读到流的末尾,返回-1✓ int read(char[ ]):将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装元素的个数,如果读到流的末尾,返回-1。
✓ close( ):读取字符用的是windows系统的功能,就希望使用完毕后,进行资源的释放。
JavaIO流详解(一)----IO流简单介绍
JavaIO流详解(⼀)----IO流简单介绍1、什么是IO我们在⽣活中⼀定遇到这样的情况,⽐如我们在编辑某个⽂件的时候,⼀时忘记了按 Ctrl+S 键,但是此时电脑恰好出现意外情况,就会导致我们的⽂件⽩⽩编辑了,如果⽂件不重要倒还好,如果是重要⽂件你估计会⾮常的⽓愤。
之所以⼀旦出现意外情况我们编辑的⽂件就没了呢?这是因为我们编辑的新⽂件还保存在内存中,没有将数据保存⾄硬盘中,那么我们应该通过 Ctrl+S 将数据从内存存储⾄硬盘中。
我们把这种数据的传输,可以看做是⼀种数据的流动,按照流动的⽅向,以内存为基准,分为输⼊Input 和输出Output ,即流向内存是输⼊流,流出内存的输出流,统称为 IO流。
Java中I/O操作主要是指使⽤java.io包下的内容,进⾏输⼊、输出操作。
输⼊也叫做读取数据,输出也叫做作写出数据。
2、流的概念和作⽤流:代表任何有能⼒产出数据的数据源对象或者是有能⼒接受数据的接收端对象流的本质:数据传输,根据数据传输特性将流抽象为各种类,⽅便更直观的进⾏数据操作。
作⽤:为数据源和⽬的地建⽴⼀个输送通道3、IO流的分类①、根据数据流向不同分为:输⼊流和输出流。
输⼊:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
如InputStream,Reader输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中。
如OutputStream、Writer②、根据处理数据类型的不同分为:字节流和字符流。
字节流:可以⽤于读写⼆进制⽂件及任何类型⽂件。
字符流:可以⽤于读写⽂本⽂件。
字节流和字符流的区别字符流的由来: Java中字符是采⽤Unicode标准,⼀个字符是16位,即⼀个字符使⽤两个字节来表⽰。
为此,JAVA中引⼊了处理字符的流。
因为数据编码的不同,从⽽有了对字符进⾏⾼效操作的流对象。
本质其实就是基于字节流读取时,去查了指定的码表。
两者的区别:(1字符 = 2字节、 1字节(byte) = 8位(bit) 、⼀个汉字占两个字节长度)1. 读写单位不同:字节流以字节为单位,字符流以字符为单位,根据码表映射字符,⼀次可能读多个字节。
IO流总结笔记
Java IO流学习总结Java流类结构流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流.流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.IO流的分类根据处理的数据类型的不同分为: 字节流和字符流.根据数据流向不同分为: 输入流和输出流.字节流和字符流字符流的由来: 因为数据编码的不同,,而有了对字符进行高效操作的流对象,本质其实就是基于字节流读取时去查了指定的编码表.字节流和字符流的区别:读写单位不同: 字节流以字节(8bit)为单位,字符流以字符为单位没根据编码表映射字符,一次可能读多个字节.处理对象不同: 字节流处理所有类型的数据(如图片,AV等等),而字符流只能处理字符类型的数据.结论: 只要处理纯文本数据,就优先考虑使用字符流,除此之外都使用字节流.输入输出流对输入流只能进行的操作,对传输流只能就行写操作,程序中需要根据待传输数据的不同特性而使用不同的流.Java IO流对象1,输入字节流InputStream()中输入字节流的继承图可见上图,可以看出:1,InputStream是所有的输入字节流的父类,它是一个抽象类.2,ByteArrayInputStream, StringBufferInputStream, FileInputStream是三种基本的介质流,它们分别从Byte 数组, StringBuffer, 和本地文件中读取数据,PiperInputStream是从与其他线程公用的管道中读取数据,.3,ObjectInputStream和所有FileInputStream的子类都是装饰流(装饰器模式的主角).2,输出字节流OutputStreamIO中输出字节流的继承图可以看出:1,OutputStream是所有的输出字节流的父类, 它是一个抽象类.2,ByteArrayOutputStream, FileOutputStream是两种基本的介质流,它们分别向Byte数组和本地文件中写入数据.PipedOutputStream是向其它线程公用的管道中子写入数据.3,ObjectOutputStream和所有FileOutputStream的子类都是装饰流.3,字节流的输入输出的对应图中蓝色的为主要的对应部分,红色的部分就是不对应部分。
Java_IO流详解
Java的核心库java.io提供了全面的IO接口,包括:文件读写、标准设备输出等。
Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
在项目开发中,IO是非常基础的部分,在面试当中经常出现。
对于初学者而言,IO部分是容易忽略的内容,求职者一定要掌握该知识点。
根据面试题详解IO流。
10.3.1 了解Java的IO类面试例题28:下面关于System.out的说法哪个正确?请选择正确的答案。
(a)System.out是1个PrintStream。
(b)System.out是1个OutputStream。
(c)System.out是1个FilterOutputStream。
(d)System.out是1个PrintStream。
(e)System.out在异常时,将抛出IOException。
考点:考查求职者对Java语言的IO处理的掌握。
出现频率:★★★★解析IO(Input/Output)是计算机输入/输出的接口。
Java的核心库java.io提供了全面的IO接口,包括文件读写、标准设备输出等。
Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
此外,Java也对块传输提供支持,在核心库java.nio中采用的便是块IO。
注意:流IO的好处是简单易用,缺点是效率较低。
块IO效率很高,但编程比较复杂。
Java的IO模型设计非常优秀,它使用Decorator模式,用户可以动态装配不同功能的Stream,以便获得需要的功能。
例如,需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。
Java的IO体系分Input/Output和Reader/Writer两类,区别在于Reader/Writer在读写文本时能自动转换内码。
基本上,所有的IO类都是配对的,即有XxxInput就有一个对应的XxxOutput。
IO流简介——精选推荐
IO流简介⼀、IO流概念1. IO流: 要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输⼊(读)Input操作。
因此我们把这种输⼊和输出动作称为IO操作,Java对数据的操作是通过流的⽅式,IO流⽤来处理设备之间的数据传输:上传⽂件和下载⽂件。
2. Stream(流): 流是⼀个抽象、动态的概念,是⼀连串连续动态的数据集合。
流是⼀组有序的数据序列,根据操作的类型,可分为输⼊流和输出流两种。
为进⾏数据的输⼊/输出操作,Java中把不同的输⼊/输出源(键盘、⽂件、⽹络连接,压缩包,其他数据源等)抽象表述为“流”(Stream)Stream是从起源(source)到接收(sink)的有序数据,java.io包中提供了很多类和接⼝来实现输⼊/输出功能。
所有输⼊流类都是抽象类InputStream(字节输⼊流)或抽象类Reader(字符输⼊流)的⼦类;⽽所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的⼦类。
对于输⼊流⽽⾔,数据源就像⽔箱,流就像⽔管中流动着的⽔流,程序就是我们的最终⽤户。
我们通过流将数据源的数据输送到程序当中。
对于输出流⽽⾔,⽬标数据源就是⽬的地,我们通过流将程序中的数据输送到⽬的地数据源中。
3. 输⼊流: ⽤于读⽂件的流,InputStream类是字节输⼊流的抽象类,是所有字节输⼊流的⽗类。
Reader类是字符输⼊流的抽象类,是所有字符输⼊流的⽗类。
4. 输出流: ⽤于写⽂件的流,OutputStream类是字节输出流的抽象类,是所有字节输出流的⽗类。
Writer类是字符输出流的抽象类,是所有字符输出流的⽗类。
⼆、IO流的分类1. 根据处理数据类型/数据单位的不同分为:字节流和字符流字节流:以字节为单位读写⽂件,操作⼆进制⽂件,当传输的资源⽂件有中⽂时,就会出现乱码。
Io流介绍及用法
Io流介绍及⽤法⼀、LO流介绍:lo流是⽤来处理设备之间数据传输的!⼆、 lo流分类:流向分类输⼊流(inputStream和Reader):输出流(OutputStream和Writer):如:内存卡和硬盘!硬盘内数据传⼊内存卡则是输⼊流!内存卡向硬盘传输数据则是输出流!操作类型分类字节流(inputStream和OutputStream):字节流可以操作任何数据(计算机数据都是字节形式存储)字符流(Reader和Writer):字符流只能操作纯字符数据,防⽌乱码相对路径和绝对路径:相对路径:指某个⽂件路径和别的⽂件路径关系的绝对路径:硬盘是真正存在的路径!三、常⽤Io流类:四、⽬的:使⽤FileInputStream读取⽂件* 思路:* 使⽤FileInputStream读取⽂件* 项⽬右键创建File,创建txt⽂件* 在txt输⼊字符* 返回public页⾯,* 建⽴和txt通道(找到txt绝对路径)* 打印txt字符代码:public class FilelnputStreamText01 {public static void main(String[]ages){FileInputStream fis=null;// 使⽤读取⽂件,需要添加被读取路径,加双\\,在异常最⼤化,(路径寻找,a.txt右击properties就可以找到路径)try {//建⽴通道//fis =new FileInputStream("D:\\myeclipse\\chapter_01\\a.txt");// 相对路径fis =new FileInputStream("a.txt");//⽆参类型,返回int值,如果打印的是字母(字码值)读取完毕返回-1//第⼀种打印/*System.out.println(fis.read());System.out.println(fis.read());*///第⼆种打印!效率不⾼,⼀个⼀个字符打印/* int temp;while((temp = fis.read()) != -1){//强⾏转换为char类型,java数值⽤unicode表⽰,转换为char类型就可以⽤原来数值来表⽰char c = (char)temp;System.out.println(c);*//* }*///第三种打印//定义byte数组告诉系统⼀次读取⼏个字节,减少内存和硬盘之间通信,可以提⾼效率byte[]arr=new byte[5];int temp;//有参的read⽅法返回的int值是读取⼏个字节while((temp = fis.read(arr)) !=-1){System.out.println(new String(arr,0,temp));}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();//finally即使上⾯代码报错,finally⾥⾯代码也会执⾏,close减少内存}finally{try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}} 运⾏结果:第⼀种⽅法,打印⼏个,就运⾏⼏个结果!代码⽐较重复第⼆种⽅法:全部打印出来,只不过字符却是⼀个⼀个被打印出来:如:123,打印出来就是:1,2,3(隔⼀⾏)第三种⽅法:直接全部打印出来,只要给byte字节数(字符位数)!注意:开发中分隔符最好不要直接写:File.separator(写上这⼀句话,连接路径就没得问题了)fis =new FileInputStream(“file”+ File.separator+"a.txt",true);。
Java IO流学习总结_2
Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。
即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类•根据处理数据类型的不同分为:字符流和字节流•根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。
本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:•读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
•处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。
除此之外都使用字节流。
输入流和输出流对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
Java IO流对象1.输入字节流InputStream IO 中输入字节流的继承图可见上图,可以看出:1.InputStream 是所有的输入字节流的父类,它是一个抽象类。
2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。
PipedInputStream是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
3.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
2.输出字节流OutputStreamIO 中输出字节流的继承图可见上图,可以看出:1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。
字节流和字节缓冲流
字节流和字节缓冲流IO流概述和分类IO流介绍IO:输⼊/输出(Input/Output)流:是⼀种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是⽤来处理设备间数据传输问题的.常见的应⽤: ⽂件复制; ⽂件上传; ⽂件下载IO流的分类按照数据的流向输⼊流:读数据输出流:写数据按照数据类型来分字节流字节输⼊流字节输出流字符流字符输⼊流字符输出流IO流的使⽤场景如果操作的是纯⽂本⽂件,优先使⽤字符流如果操作的是图⽚、视频、⾳频等⼆进制⽂件,优先使⽤字节流如果不确定⽂件类型,优先使⽤字节流.字节流是万能的流字节流写数据字节流抽象基类InputStream:这个抽象类是表⽰字节输⼊流的所有类的超类OutputStream:这个抽象类是表⽰字节输出流的所有类的超类⼦类名特点:⼦类名称都是以其⽗类名作为⼦类名的后缀字节输出流FileOutputStream(String name):创建⽂件输出流以指定的名称写⼊⽂件使⽤字节输出流写数据的步骤创建字节输出流对象(调⽤系统功能创建了⽂件,创建字节输出流对象,让字节输出流对象指向⽂件)调⽤字节输出流对象的写数据⽅法释放资源(关闭此⽂件输出流并释放与此流相关联的任何系统资源)⽰例代码public class FileOutputStreamDemo01 {public static void main(String[] args) throws IOException {//创建字节输出流对象/*注意点:1.如果⽂件不存在,会帮我们创建2.如果⽂件存在,会把⽂件清空*///FileOutputStream(String name):创建⽂件输出流以指定的名称写⼊⽂件FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");//void write(int b):将指定的字节写⼊此⽂件输出流fos.write(97);// fos.write(57);// fos.write(55);//最后都要释放资源//void close():关闭此⽂件输出流并释放与此流相关联的任何系统资源。
【Java】基础41:什么叫IO流?
【Java】基础41:什么叫IO流?今天是我自学Java的第40天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:一、IO流概述说到IO流,先得提一提电脑的基本概念:•CPU:中央处理器,处理速度最快。
•memory:内存,临时性存储设备,处理速度次之,但数据不保存。
•disk:硬盘,持久性存储设备,处理速度最慢,但数据永久保存。
什么叫IO流?IO流,就是指读写文件的技术。
1.inputI就是指input:输入的意思,这是输入流。
意思是将硬盘里的数据输入到内存里,也就是读取文件。
2.outputO指output:输出的意思,这是输出流。
意思是将内存中的数据输出到硬盘上,也就是写入文件。
用一句话记忆就是:输入到内存(读取硬盘),从内存输出(写入硬盘)。
举一个例子:我们在记事本上写东西,写完后保存,保存的过程就是写入文件的过程。
•不保存:数据是在内存里面,退出后数据会消失;•保存:数据会被写到硬盘上,退出后数据也会保存。
其中根据数据的类型IO流又分为:字节流:以字节为单位读写数据的流,能够操作所有文件•字节输入流: InputStream•字节输出流: OutputStream字符流:以字符为单位读写数据的流,用于操作文本文件•字符输入流: Reader•字符输出流: Writer今天主要学习字节流:二、OutputStream输出流它是输出流最上层的父类,是一个抽象类,其中它有一个子类叫FileOutputStream。
1.构造方法(一)先介绍其两个构造方法:①构造方法一:路径存在FileOutputStream(String name)。
根据文件路径输出文件,“a.txt”是一个相对路径,所以是输出在当前项目下。
②构造方法一:路径不存在“aa/a.txt”因为其父路径不存在,所以会报错。
③构造方法二FileOutputStream(File file)。
一般都是使用构造方法一,简单方法,只要输入路径就好了,但是会出现②中的这种情况。
Java IO流层次结构
Java I/O流层次结构2007-08-18 16:16一、I/O流层次图7.1.1是对java.io包中的字节流关系的描述。
对于字符流。
我们将在7.4节中介绍。
我们通过图7.1.1可以看到io处理的类层次。
所有的输入流都是InputStream继承而来的。
在类InputStream中定义的方法包括从流中读取数据,在流中标记某个位置获取流中可得到的数据量,以及重置流中的读取位置等。
同样,所有的输出流都是从抽象类OutputStream继承而来的。
在类OutputStream 中定义的方法包括向流中写人数据以及刷空流等。
其他的输入/出流作为IntputStream和OutputStream的子类,主要实现对特定流的输入和输出处理。
图7.1.1 I/O处理的类层次注:图中,细线框中的内容为类,粗线框中的内容为接口。
线段表示继承,射线表示接口的实现。
FileInputStram和FileOutputStram用于读/写本地文件系统中的文件。
PipedInputStream和PipedOutputStream用来实现管逍的输入出。
ByteArrayInputkStream和ByteArrayOutputStream 用于读/写内存数据。
StringBufferInputStream 使程序可以从一个StringBuffer类的可变字符串中读取数据。
SequenceInputStream用来把多输入流连接到一个输出流。
FilterInputStream和 FilterOutputStream 分别重写了类Input Stream和OutputStream中的所有方法,为过滤流提供了统一的接口,使得在读写数据的同时可以对数据进行处理。
DateInputStream和 DataOutPutstream可以用与机器无关的格式读/写Java的基本数据类型。
BufferedInputStream和 BufferedOutputStream 在读/写的同时对数据进行缓存,从而减少对数据源的访问,提高运行效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示例
将某文件夹下所有文件和文件夹转为压缩文件。 读取某压缩文件的所有条目。 写一个方法,将某路径下所有文件和文件夹转成压缩文件。(递归)
ห้องสมุดไป่ตู้
课后练习
新建一个商品类,并写两个方法,一个方法负责将若干个商品保存到 文件中,另一个方法负责将若干个商品读取出来。 复制一张图片。 用Scanner写一个控制台输入程序,将输入的每一行保存到文件中。 写一个类,用于压缩或解压缩文件,并将压缩条目进行重命名,以防 中文问题。 写一个文件工具类,有如下功能: 1、用于查找文件名满足一定正则表达式的文件。 2、用于查找文本文件内容中存在某字符串或正则表达式的内容。 3、替换文本文件内容中存在某字符串或正则表达式的内容。
boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat() int readInt() long readLong() short readShort() int readUnsignedByte() int readUnsignedShort()
void close() 关闭Reader流。 boolean ready() 判断流是否已经准备好被读取。 skip(long n) 跳过指定的n个字符。 boolean markSupported() 和InputStream中的markSupported方法类似。
void mark(int readAheadLimit) 和InputStream中的mark方法类似。 void reset() 和InputStream中的reset方法类似。
Writer常用方法
void write(int c) 将参数c的低16位组成字符写入到流中。 void write(char[] buffer) 将字符数组buffer中的字符写入到流中。 void write(char[] buffer, int offset, int length) 将字符数组buffer中从offset开始的length个字符写入到流中。
void write(int b) 在文件的当前指针位置写入一个字节。 void write(byte[] bytes) 将最多b.length个数据字节从此文件写入byte数组。 void write(byte[] bytes, int off, int len) 将最多len个数据字节从此文件写入byte数组。
示例
将若干个商品对象保存到文件中。 将拥有若干个商品对象的动态数组保存到文件中。
打印流
PrintStream和PrintWriter表示向目标写入字节和字符。打印流只有 输出,没有输入。
示例
在控制台打印一个字符串。 向文件中写入一个字符串。
Zip文件流
Zip文件流主要用于读取Zip压缩文件的条目,压缩和解压的操作。 Zip文件流属于处理流,和FileInputStream和FileOutputStream一起 使用。 优点:可以满足项目中自动打包下载的需求。 缺点:不支持中文路径和文件名,需要重命名。
RandomAccessFile类的方法
long length() 返回此文件的长度。 void seek(int pos) 设置文件指针位置。 long getFilePointer() 返回此文件中的当前偏移量。 void close() 关闭文件。
void setLength(long newLength) 设置此文件的长度。 int skipBytes(int n) 尝试跳过输入的n个字节以丢弃跳过的字节。 FileChannel getChannel() 返回与此文件关联的唯一文件通道对象。
返回到流的上一个标记。注意必须流支持标记功能。
OutputStream基本方法
void write(int c) 将指定的字节写入此输出流。 void write(byte[] buffer) 将b.length个字节从指定的字节数组写入此输出流。 void write(byte[] buffer, int offset, int length) 将指定字节数组中从偏移量off开始的len个字节写入此输出流。
第08讲 I/O流
武汉博众创新信息科技有限公司 主讲:裴本桢
本章内容
文件随机读写类 流的定义与分类 四个抽象类 文件流 字节字符流 数据流 缓存流 对象流 打印流 Zip文件流
随机文件读写类RandomAccessFile
File、FileFilter以及FilenameFilter都是对文件和目录进行操作, 不能实现对文件内容的读写。要实现对文件内容的随机读写,可以使 用RandomAccessFile类。 RandomAccessFile类能够随机访问文件,它装文件内容存储在一个大 型byte数组中。它存在着指向该隐含byte数组的光标或索引,称为文 件指针,该指针位置可以通过seek()方法设置。
对象流
ObjectOutputStream和ObjectInputStream 分别与 FileOutputStream和FileInputStream一起使用时,可以为应用程序 提供对对象图形的持久性存储。ObjectInputStream用于恢复那些以 前序列化的对象。其他用途包括使用套接字流在主机之间传递对象, 或者用于编组和解组远程通信系统中的实参和形参。
Zip文件流主要类和方法
ZipEntry 表示压缩条目的类。 void putNextEntry(ZipEntry ze) 开始写入新的ZIP文件条目并将流定位到条目数据的开始处。 void write(byte[] b, int off, int len) 将字节数组写入当前ZIP条目数据。 ZipEntry getNextEntry() 读取下一个ZIP文件条目并将流定位到该条目数据的开始处。 int read(byte[] b, int off, int len) 从当前ZIP条目读入字节数组。
int read() 在文件的当前指针位置读取一个字节,返回字节的整数表示形式。 int read(byte[] bytes) 将最多bytes.length个数据字节从此文件读入byte数组。 int read(byte[] bytes, int off, int len) 将最多len个数据字节从此文件读入byte数组。
InputStream基本方法
int read() 读取一个字节,并将它返回。 int read(byte[] buffer) 将数据读入一个字节数组,同时返回读取的字节数。 int read(byte[] buffer, int offset, int length) 将数据读入一个字节数组,放到数组的offset指定的位置开始,并用 length来指定读取的最大字节数。
void close() 关闭流。 int available() 返回可以从中读取的字节数。 long skip(long n)
在输入流中跳过n个字节,将实际跳过的字节数返回。
boolean markSupported() 判断流是否支持标记功能。 void mark(int readlimit) 在支持标记的输入流的当前位置设置一个标记。 void reset()
数据流可以在数据和设备之间进行读/写操作。 可读/写的数据有基本数据、数组和字符串。
示例
将对象的各个属性保存到文本文件中。 将文本文件中的数据读取出来,并还原成对象。
缓存流
BufferedInputStream、BufferedReader、BufferedOutputStream、 BufferedWriter为流的操作添加缓存功能。
流的定义与分类
流是程序与外界进行数据传输的方式。 流的分类: 按方向划分:输入流、输出流。 按单位划分:字节流、字符流。 按功能划分:节点流、处理流。 一个流是输入流还是输出流是相当于程序而言的,从程序中向外界传 输是输出流,从外界向程序中传输是输入流。
四个抽象类
InputStream 字节输入流。 OutputStream 字节输出流。 Reader 字符输入流。 Writer 字符输出流。
void void void void void void void void void
writeBoolean(boolean v) writeByte(int v) writeBytes(String s) writeChar(int v) writeDouble(double v) writeFloat(float v) writeInt(int v) writeLong(long v) writeShort(short v)
示例
读取文件内容并打印到控制台。 复制文件。 向文本文件中写入字符串。 读取A.txt中的内容并写入(追加)到B.txt中。
字节字符流
字节字符输入流InputStreamReader和字节字符输出流 OutputStreamWriter的作用是将字节流转换成字符流来处理。
数据流
void write(String string) 将string字符串写入到流中。 void write(String string, int offset, int length) 将字符string中从offset开始的length个字符写入到流中。
文件流
文件流是指程序与文件之间的流,是用作文件的读/写操作的。 FileInputStream 文件输入流(字节) FileOutputStream 文件输出流(字节) FileReader 文件输入流(字符) FileWriter 文件输出流(字符)