Java io
1.File(文件类型)
作用:对文件系统上的文件或目录进行查看操作等。只能创建,删除文件(目录)或者查看其属性,但是不能改变文件的内容。
构造器:
File(String pathname)
pathname:指定文件或目录的路径(此路径硬盘上不一定存在)
File(String pathname,String childname)
常用方法:
exists():判断的是指定的路径在硬盘上是否真实存在
getName():获取文件名
getAbsolutePath():获取绝对路径
listFiles():返回的是此目录下的所有文件和目录
createNewFile():创建文件
创建时,不一定成功。当这个要创建的文件的父目录不存在时,创建失败。(这个方法需要抛出异常)
isFile():判断指定的file是不是文件
isDirectory():判断指定的file是不是目录
mkdir():创建文件夹(只会创建一层目录)
mkdirs():创建文件夹(会创建多层目录)
detele():删除文件
当指定一个路径时,如果此路径下有文件或文件夹,会删除失败;此路径下没有东西时,会删除指定路径最里层 的目录。如果指定的路径是一个文件时,也只会删除此文件;当指定的路径是目录时,并且目录下有东西时,删除逻辑是先从最后一层开始删除,一次向上删除。
2.在内存中指定一个路径文件
路径:文件操作系统的路径分隔符不一样
如:window下的:\
linux下的:/
File.separator:常量,会根据不同操作系统返回不同的分隔符。
相对路径:相对于某一个目录来说的。
.:表示所在的当前目录
..:表示返回上一层目录
绝对路径:(不建议使用)以根目录为参照物的,也就是需要从跟目录写起。
window: c:\a\a.txt
linux: /home/a.txt
3.RandomAccessFile(随机读写文件类型)
作用:对文件可以进行读取和写入操作。
构造器:
RandomAccessFile(File file,String mode):
file:要指定一个文件的路径。
mode:"r"(可读),"rw"(可读可写)
RandomAccessFile(String pathname,String mode):
pathname:必须指定一个文件的路径。
常用方法:
read():只能读取一个字节,读取的字节放入int类型的数据的低八位上
write(int a):只能写出a的二进制的低八位
read(Byte[] arr):作用是将读取到的arr.length个字节存入数组arr中。返回值为实际读取的有效字节个数。
write(Byte[] arr):作用是将字节数组里的字节写入文件中。
write(byte[] arr,int startIndex,int length):作用是将字节数组里的字节从下标startIndex开始,写length个字节。
getFilePointer():获取文件指针的下标。
seek(int index):将指针移动到某一下标 按位运算:
二进制进行同位(同一位置上的数进行运算)运算
10010011
01110111
————————
&:00010011 有0为0,全1为1
|:11110111 有1为1,全0为0
^:11100100 相同为0,不同为1
二进制移动符号:
>>>:无符号向右移动
>>:考虑正负符号向右移动,所有的二进制都要移动,空出的补0,但是符号位不变。
<<:无符号向左移动,所有的二进制都要移动,低位补0。
指针:RandomAccessFile这个类,不管是读还是写,底层都存在一个指针
指针指的是每一次读写后所在的字符位置。默认第一个字符的下标为0.
4.IO流的分类
1):流按照传输方向来分类:
输入流:外界的数据传输(送入,读取)到当前程序中
输出流:当前程序的数据传输(写出)到外界。
2):按照读写单位分类
字节流:读写时最小单位为一个字节
字符流:读写时最小单位为一个字符
3):按照是否与外界设备直接相连分类:
节点流:直接与外界设备相连的流类型
处理流:间接的,一般内部都是封装了节点流。
4):按照效率高低分类:
低级流
高级流
输入(input):把外界(硬盘等)的数据读入到程序中。
输出(output):把程序中的数据写出到外界。
5.字节流
父类:InputStream和OutputStream,抽象类型
子类型:
文件字节流:
FileInputStream(文件输入流):
构造器:
FileInputStream(String filepath)
常用方法:
read():作用是读取一个字节,放入int类型数据的低八位上。
read(byte[] b):将数据读入到字节数组中,返回的是有效字节个数。
FileOutputStream(文件输出流):
构造器:
FileOutputStream(String filepath[,boolean append])
如果指定的文件存在,会新建同名文件以覆盖原有文件,再从头开始写。
第二个参数 boolean append
false:表示不追加,从文件的头部进行写出操作。
true:表示追加,从文件的尾部进行写出操作
输出流的特点:文件不存在,会自动创建文件。
常用方法:
write(int num):写的是num的二进制的低八位
write(byte[] b):将整个字节数组写出
write(byte[] b,int startIndex,int length)
6.字节缓冲流
为了提高书写效率,减少交互次数,设计了一个缓冲区,先将数据填入缓冲区,如果缓冲区的数据满了,在一次性清空出去。
BufferedInputStream
构造器:BufferedInputStream(InputStream is)
BufferedOutputStream
构造器:BufferedOutputStream(OutputStream os)
常用方法:
flush():作用是将缓冲区的数据清空出去。
特点:流关闭前,会清空缓冲区内的数据。
7.数据输入输出流
DataInputStream
构造器:DataInputStream(InputStream is)
DataOutputStream
构造器:DataOutputStream(OutputStream os)
8.对象输出输入流
ObjectInputStream
构造器:ObjectInputStream(InputStream is)
作用:将一串字节序列转换成相应的对象(反序列化)
ObjectOutputStream
构造器:ObjectOutputStream(OutputStream os)
作用:将对象转换成一串字节序列(序列化)
序列化时应注意:
1:被序列化的对象的类型必须实现Serializable接口(此接口内是空的,只起到一个标志的作用)
2:提供序列化版本号的属性(以防类型被改变后不能反序列化的问题出现-兼容性问题)。
序列化的修饰词:transient
作用:对象的某些属性没必要持久化时,可以在类型的这些属性前添加此修饰词。
9.字符流
父类:
输出流:Writer
输入流:Reader
子类:
OutputStreamWriter(字符流中的基本流)
构造器:
OutputStreamWriter(OutputStream os[,String charset])
[]:可有可无,charset:编码集
常用方法:
write(int num):参数num应该是一个字符(char类型),写出参数num的二进制的低十六位
write(char[] ch):写出整个字符数组
write(char[] ch,int startIndex,int length):
write(String str):写出字符串
write(String str,int startIndex,int length):
InputStreamReader
构造器:
InputStreamReader(InputStream is[,String charset])
常用方法:
int read():读取一个字符,存入int类型的数据的低16位上。
10.缓冲字符流
缓冲输出流:
BufferedWriter:
构造器:
BufferedWriter(OutputStreamWriter ost)
常用方法:
write(char ch):作用是写一个字符类型
write(char[] ch):作用是写出一个字符数组
write(char[] ch,int startIndex,int length):
write(String str):作用是写出一个字符串
flush():实时性清空缓冲区
缓冲输入流:
BufferedReader:
构造器:
BufferedReader(InputStreamReader isr)
常用方法:
int read():返回一个字符的int数值
read(char[] ch):读取多个字符存入字符数组中
readLine():读取一行字符串,读不到数据返回null
11.PrintWriter
PrintWriter这个类提供了行自动刷新功能。要使用println()方法,否则不自动刷新. 构造器:
PrintWriter(OutputStream os [,boolean autoFlush])
PrintWriter(Writer wt,boolen autoFlush)
常用方法:
println():写出数据并自动刷新缓冲区