File类的作用
一个File类对象可以代表一个文件或目录,
File可以实现获取文件和目录属性等功能,
可以实现对文件和目录的创建,删除等功能.
File类操作目录与文件的常用方法
文件方法:
createNewFile();创建新文件
delete();直接从磁盘删除
exists();查询磁盘中是否存在指定文件
getAbsolutePath();获取绝对路径
getPath();获取相对路径
getName();获取文件名,相当于调用了一个toString方法
isFile();判断是否是文件
length();查看文件中的字节数.
目录方法;
exists();查询目录是否存在.
isDirectory();查询文件夹是否存在
isFile();查询文件是否存在
mkdir();创建单层目录
delete();删除目录
getParentFile();获取目录的父级目录
list();返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录.
listFiles;返回一个字符串,命名由此抽象路径名表示的目录中的文件和目录.可以获取相对路径和绝对路径,可以对文件进行操作.
流可以分为哪些种类
1.从数据流编码格式可划分为:
字节流和字符流
字节流中常用类:
字节输入流FileInputStream
字节输出流FileOutputStream
字符流中的常用类:
字符输入流FileReader
字符输出流FileWriter
2.流按照数据传输方向分为:
输入流:往程序中读叫输入流.
输出流:从程序中往外写叫输出流.
InputStream和OutputStream的子类都是字节流,可以读写二进制文件,主要处理音频,图片,歌曲,字节流,处理单元为一个字节.
Reader和Writer的子类都是字符流
主要处理字符或字符串,字符流处理单元为1个字符.
字节流将读取到的字节数据,去指定的编码表中获取对应文字.
InputStream的基本方法:
读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾.
读取一列的字节并存储到一个数组中buffer.返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
关闭流释放内存资源
OutputStream的基本方法:
向输出流中写入一个字节数据,该字节数据为参数b的低8位,
讲一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流.
关闭流释放内存资源
输入输出字符流:
Reader的基本方法,
读取一个字符并以整数的形式返回,
如果返回-1已到输入流的末尾,
读取一系列字符并存储到一个数组buffer,
返回实际读取的字符数,如果读取前已到输入流的末尾返回-1
关闭
Writer的基本方法:
向输出流中写入一个字符数据,该字节数据为参数b的16位
一个字符类型的数组中的数据写入输出流.
将一个字符类型的数组中的从指定位置(offset)开始的length个字符写入到输出流.
关闭
3.根据封装类型不同流分为
节点流:
如果分装的是某种特定的数据源,如文件,字符串,字符串数组等,则称为节点流.
处理流:
如果流封装的是其他流对象,称为处理流.
处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法.
4.print流:
print打印流:只做输出没有输入
打印流分为字节打印流和字符打印流
printWriter:字符打印流
print方法可以打印各种类型数据.
5.对象输入输出流:
主要作用:用于写入对象信息与读取对象信息.对象信息一旦写到文件上那么对象的信息就可以做到持久化.
对象的输出流:ObjectOutputStream
对象的输入流:ObjectInputStream
要将序列化后的对象保存下来,需要通过对象输出流(ObjectOutputSteam)将对象状态保存,之后再通过对象输入流(ObjectInputStream)将对象状态恢复.
在ObjectInputStream中用readObject()方法可以直接读取一个对象,
ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中.
字符流可以读取图片,音频等文件吗?
不可以,字符流在读取完了字节数据后并没有直接往目的地写,而是先查编码表,查到对应的数据就将该数据写入目的地.如果查不到,则码表会将一些未知区域中的数据去map这些字节数据,然后写到目的地,这样的话就造成了源数据和目的数据的不一致.
字符流读取一些纯文本文件.
而字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储.
如何提高流的读写速度
使用缓冲流:
缓冲区概念:一片内存存储空间,在读写数据的程序之前,数据存储在这里,这样不用每次去物理硬盘上的数据源取了.
缓冲输入流(BufferedlnputStream):在缓冲区的输入流(InputStream),输入流都是在硬盘数据源取数据的,要从缓冲区取数据,那缓冲区里面要有数据,所以要建立缓冲输入流(BufferedlnputStream)
什么是对象序列化,对象反序列化,什么时候用?
对象的寿命通常随着生成该对象的程序终止而终止.
有时候,可能需要将对象的状态保存下来,在需要的时在将对象恢复.
对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程,既然对象的输出流将对象写入到文件中称之为对象的序列化,所以必须要实现Serializable接口.
Serializable接口没有任何方法.当一个类声明实现Serializable接口后,表名该类可被序列化.
在类中可以生成一个编号,
pricate static final long serialVersionUID=.......................L;随机生成唯一的.
SerialVersionUID用来表名实现序列化类的不同版本间的兼容性.某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化.