IO流(一)

IO及常用的类

1.文件操作

构造函数 :
public File(String pathname) :根据一个文件或文件夹的路径名封装一个File对象
public File(String parent,String child) :根据父目录的路径名和儿子的名称封装一个File对象
public File(File parent,String child) :根据父目录的File对象和儿子的名称封装一个File对象
public File(URI uri) :根据uri创建新的File实例;

这里写图片描述
(这API翻译有点垃圾啊…)

常用的方法:
public boolean createNewFile():创建文件,如果文件不存在,才创建并且返回true,否则就返回false
public boolean mkdir():创建文件夹,如果不存在,才创建并且返回true,否则就返回false
public boolean mkdirs():创建文件夹,如果路径中有其它目录不存在,那么一并创建。
public boolean delete()删除此抽象路径名表示的文件或目录

public boolean isDirectory() 是否是文件夹
public boolean isFile() 是否是文件
public boolean exists() 是否存在
public boolean canRead() 是否可读
public boolean canWrite() 是否可写
public boolean isHidden() 是否隐藏

public String getAbsolutePath() 获取绝对路径
public String getPath() 获取封装File对象时传递的路径
public String getName() 获取名称
public long length() 获取文件的字节数
public long lastModified() 最后修改的时间的毫秒值

String[] list() 获取当前目录下的所有子File的名称的数组
File[] listFiles() 获取当前目录下的所有儿子File对象的数组


Java流类的类结构图:

这里写图片描述

字节流

字节输出流 OutPutStream

OutPutStream是所有字节输出流的超类;

文件输出流FileOutPutStream

FileOutPutStream:将数据写入文件的输出流;
构造函数:
FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream对象写出的都是byte[]数组;

boolean append:是否换行(不换行的话会覆盖之前所写的内容)
FileOutputStream(File file,boolean append)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name,boolean append)创建一个向具有指定名称的文件中写入数据的输出文件流

System.lineSeparator()获取系统的换行符


字节输入流 InPutStream

InPutStream是所有字节输出流的超类;

文件输出流FileOutPutStream

FileOutPutStream:将文件中获取数据;

FileInputStream(File file) 创建输入流, 关联File对象表示的文件
FileInputStream(String name)创建输入流,关联路径名所表示的文件
FileInputStream(FileDescriptor fdObj) 文件描述符描述已有文件

//用fis读数据(可以读文件中汉字),用fos写数据
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf)) != -1){
fos.write(buf, 0, len);
}
fis.close();
fos.close();

字节输出输入缓冲流

这种流内部维护了一个缓冲区字节数组,因此在读写时非常高效.
BufferedOutputStream:

BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

BufferedInputStream

BufferedInputStream(InputStream in) 创建一个 BufferedInputStream;
BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream;

字符流

Writer

OutputStreamWriter:字符流通向字节流的桥梁

构造函数:
public OutPutStreamWriter(OutPutStream out);使用默认字符集
public OutPutStreamWriter(OutPutStream out,Charset cs);使用给定字符集
public OutPutStreamWriter(OutPutStream out,CharsetEncoder enc);使用给定字符集编码器
public OutPutStreamWriter(OutPutStream out,String charsetName);使用指定字符集

OutPutStreamWriter的实例对象osw的主要方法:

osw.write(int c) 写出一个字符
osw.write(char[] cbuf) 写字符数组
osw.write(char[] cbuf,int off,int len)写字符数组cbuf中,从off开始,共len个字符!
osw.write(String str) 写一个字符串
osw.write(String str,int off,int len)写一个字符串str中从off开始,共len个字符
osw.write();
osw.flush()
osw.close();

Reader (抽象类)

InputStreamReader 字节流通向字符流的桥梁

构造函数:
public InPutStreamWriter(InPutStream in);使用默认字符集
public InPutStreamWriter(InPutStream in,Charset cs);使用给定字符集
public InPutStreamWriter(InPutStream in,CharsetDecoder dec);使用给定字符集解码器
public InPutStreamWriter(InPutStream in,String charsetName);使用指定字符集

转换流便捷类:FileWriter和FileReader

构造函数 :
public FileWriter(String fileName):底层调用的是 new FileOutputStream(fileName)
public FileWriter(String fileName, boolean append);
public FileWriter(File file);
public FileWriter(File file, boolean append)
public FileWriter(FileDescriptor fd)


FileWriter = FileOutputStream + 本地默认编码表
FileReader = FileInputStream + 本地默认编码表
所以功能单一.

字符缓冲流

BufferedWriter

构造函数:
BufferedWriter(Writer out)创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)创建一个使用给定大小输出缓冲区的新缓冲字符输出流

BufferedReader

构造方法
BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)创建一个使用指定大小输入缓冲区的缓冲字符输入流


小结

IO的继承体系:
    InputStream:字节输入流
        |-- FileInputStream
        |-- BufferedInputStream
    OutputStream:字节输出流
        |--FileOutputStream
        |-- BufferedOutputStream
    Reader:字符输入流
        |-- InputStreamReader
                |-- FileReader
        |-- BufferedReader
    Writer:字符输出流
        |-- OutputStreamWriter
                |-- FileWriter
        |-- BufferedWriter

构造函数
    1)四大基本流,与文件关联的流,他们的构造函数,直接接收文件!(与文件相关联)
        FileInputStream
        FileOutputStream
        FileReader
        FileWriter
    2)四大装饰流,它们的构造函数都是接收本体系的顶级父类(本体系的顶级父类)
        BufferedInputStream
        BufferedOutputStream
        BufferedReader
        BufferedWriter
    3)转换流,把字节流变字符流,因此必然接收字节流。要对应字节输入流或字节输出流
        InputStreamReader
        OutputStreamWriter

序列化与反序列化

https://tech.meituan.com/serialization_vs_deserialization.html?utm_source=tuicool?utm_source=tuicool


参考自:
https://www.cnblogs.com/ylspace/p/8128112.html
https://blog.csdn.net/anxpp/article/details/51512200
https://blog.csdn.net/huangwenyi1010/article/details/75577091?ref=myread

原文地址:https://www.cnblogs.com/DiZhang/p/12544955.html