IO流复习总结

IO流是input和output的缩写,故名思意就是对文件进行读入和写出。在说IO流之前先说明一下File类,File类new出来的对象可以代表一个具体的文件也可以代表一个文件目录(文件夹)

File类对象new的构造方法为File file = new File("里面放的是路径,可以是绝对路径,也可以是相对路径");这里注意相对路径默认是在项目下的(并非模块目录下或者src目录下)

注意,一个File对象不一定都存在真实的文件地址。File对象可以新建,删除,重命名文件和目录,但是不能访问文件本身。修改操作需要借用到IO流

常用的构造器如下

 

对于本地文件的目录来说,文件路径每一级都对应一个分隔符,WINDOWS系统默认分隔符是‘  \  ’,LInux和URL的分隔符是 ‘  /   ’ 

 

 构造器参数字符串如果直接写单个分隔符,会被认为是转义字符,配合后面的字母构成特殊字符,但这不是我们想要的,所以需要再写一个分隔符\再次转义,表明我不是转义字符

当然,java也为我们提供了公有静态常量separator这个String类型的常量,静态的,可以用File类名直接调用,拼接使用,也是方法之一。

以下介绍File类的常用方法

 

getPath()获取的路径就是你FIle构造器的形参,是绝对路径就得到绝对路径,是相对路径就得到相对路径  getName()方法获取的是文件的名字

假设相对路径只有“114514.txt”那么getParent()得到的是null  后面两个方法就不说了

 public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组 

public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组

 

 

 

以上为File类的常用方法和构造器说明,以下为IO流的具体介绍

Java程序中,对于数据的输入/输出操作以“流(stream)” 的 方式进行。 

java.io包下提供了各种“流”类和接口,用以获取不同种类的 数据,并通过标准的方法输入或输出数据。

 

上图是流的分类,简单总结以下就是字节流适用于非文本文件的传输,字符流适用于文本文件的传输。如果单纯的复制一份文本文件,那么两个流都可以实现。

输入流顾名思义就是能够读取文件的内容,然后展示到控制台或者再输出到终端或者其他设备。输出流就是把一个已有的文件读取再输出到指定的位置。

节点流的意思就是直接把流和数据和程序联系在一起,传输的速度相对慢些,而处理流是作用在节点流身上的流,传输的速度相对快些。

节点流:直接从数据源或目的地读写数据

处理流:不直接连接到数据源或目的地,而是“连接”在已存 在的流(节点流或处理流)之上,通过对数据的处理为程序提 供更为强大的读写功能。

对于节点输入输出流的用法如下

对于节点输入字节流和节点输入字符流的使用如下   FileInputStream fis = new FileInputStream(new File("")或者直接写文件的字符串路径)//本质都一样

FIleReader fr = new FileReader(new File("")或字符串路径);二者的方法名基本一致,只是形参不同,字节流是字节数组,字符流是字符数组

 

 对于节点输出流大同小异,直接放图

 

 这里要注意,节点输出流在写入一个文件时,如果使用构造器FileOutputStream(file),则目录下有同名文 件将被覆盖。 如果使用构造器FileOutputStream(file,true),则目录下的同名文件不会被覆盖, 在文件内容末尾追加内容。

节点流传输文件的速度很慢,因此需要借助处理流,在复制一个小电影的时候,处理流比节点流要快很多,首先来介绍处理流中的缓冲流

缓冲流内部有一个八个字节的缓冲区,在使用缓冲流时要注意,缓冲流是作用在节点流之上的,所以需要套接。往流中写入字节时,会等到缓冲区满了之后才会一次性把缓冲区的内容写入文件里。读取缓冲区同理。flush()方法可以手动将buffer的内容写入文件

 

 这里为了省事简单写了一下如何把一个文件的内容拷贝到另一个文件,大家需要try catch包裹使用。唯一需要注意的是,BufferedReader多了一个readLine()方法,可以读取一整行的内容。返回值类型是String。缓冲流的内部已经提供了flush操作,所以这里可写可不写。

处理流之二:转换流

转换流一共有两个,InputStreamReader 和 OutPutStreamWriter 

InputStreamReader  实现将字节的输入流按指定字符集转换为字符的输入流,这里转换流的构造器参数需要是节点流对象

OutPutStreamWriter 实现将字符的输出流按指定字符集转换为字节的输出流。至于为什么是字符输出流转化为字节输出流,我的解释如下

首先转换流是处理流,需要节点流作为基础,作用在节点流之上。其次字符输出流的底层实现也是字节输出,所以先是字节输出流先包裹在字符输出处理流之中,然后字符输出流再根据你输入的字符编码(U8、GBK )等等进行字符到字节的转化,字符缓冲区的字符都转化为字节之后,字节输出流才会写入文件中。

 

 接下来是标准输入输出流,顾名思义,标准流,输入就是在键盘录入,输出就是写入控制台

打印流的使用如下,需要注意public static void setOut(PrintStream out)这个方法可以修改打印字节流的输出设备,

PrintStream是字节流,它的write方法形参没有字符串,int会转成英文字符,byte不变

 

数据流可以把基本数据类型的数据进行读取和写入操作,保存在dat文件中,里面都是二进制数据

 

 

 对象流ObjectInputStream和ObjectOutPutStream可以对实现Serializable接口的类进行序列化和反序列化。

 

 RandomAccessFile类可读可写。

 

posted @ 2023-01-07 23:05  -她的梦-  阅读(27)  评论(0编辑  收藏  举报