IO流

IO流:数据传输的中转站 源————>IO流————>目的地
IO流一般都是成对出现,也就是按照流向分为:输入流和输出流
IO流按照操作的对象来分:字节流和字符流

一、字符流
基类:Reader(读)、Writer(写)
|-Reader
   |--BufferedReader:对Reader进行了包装,提供了缓冲区(8192),有readLIne方法
       构造函数:BufferedReader(Reader r)
   |--InputStreamReader:转换流,将字节流转成字符流new InputStreamReader(InputStream in)
       |---FileReader:读取文件的字符流,FileReader(File file),FileReader(String fileName)
|-Writer
   |--BufferedWriter:包装类,常用方法:write(String s)、flush、newLine(),
      BufferedWriter(Writer w)
   |--OutputStreamWriter:转换流,OutputStreamWriter(OutputStream out)
       |---FileWriter:写入文件,FileWriter(File file),FileWriter(String fileName)
        FileWriter(File file,boolean append),FileWriter(String fileName,boolean append)
        当append值为true时,将写入文件的末尾处,当为False时,从文件开头开始写,就会覆盖原来的。
       
二、字节流
|-InputStream(输入流)
   |--FileInputStream:读取文件的字节流,和FIleReader用法基本一样。
   |--FilterInputStream:过滤流,一般不使用,只是对InputStream的简单包装
       |---BufferedInputStream:包装类,BufferedInputSteam(InputStream in),提供了缓冲区
|-OutputStream(输出流)
   |--FileOutputStream
   |--FilterOutputStream
       |---BufferedOutputStream
      
三、使用IO流必须要捕获异常,原因在于我们必须要还资源(关闭流)。
FileWriter fw = null;
try{
fw = new FileWriter(new File());
fw.write("a");
}
catch(IOException e)
{
e.printStackTrace();//异常类名、异常信息、详细错误信息
System.out.println(e.toString());//异常类名、异常信息
System.out.println(e.getMessage());//异常信息
}
finally
{
try{if(fw!=null)fw.close();}catch(IOException e){e.printStackTrace();}
}


四、File文件类
1、构造方法:
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。


2、常用方法
isFile:判断对象是否指向一个标准文件
isDirectory:判断对象是否为一个文件夹
isAbsolute:判断是否为一个绝对路径
exists:判断对象指向的文件是否存在
createNewFile:根据对象的描述创建一个文件
getName:获得文件名
getPath:获得路径名
getParent:获得文件的父级抽象路径
getAbsolutePath:获得文件的绝对路径名
mkdir:创建此抽象路径名指定的目录。(只能在存在的文件夹下创建一级目录)
mkdirs: 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(创建多级目录,c:\a\c\v\d)
list(FilenameFilter filter):根据指定过滤器遍历文件夹中的所有文件,返回String[]
如果对象为标准文件,则返回null,如果对象是一个空文件夹,则返回空数组。length为0
FilenameFilter是一个接口,只有一个方法accept,我们需要实现接口的accept方法。
实现类是给list方法自动调用的
方法的参数是list方法传给我们的,返回的结果也是给list方法去用。
listFiles:和list基本一样,返回值类型不一样,返回File[]。
常用案例:遍历目录下所有的文件和文件夹   拷贝一个文件夹 


五、RandomAccessFile:文件流,可以读写
1、RandomAccessFile(File file,String mode)、RandomAccessFile(String fileName,String mode)
mode:r,只读;rw,读写
2、有很多read和write方法。
seek方法:指定从哪个位置开始读写
skipBytes(int n):跳过多少个字节

六、PrintStream、PrintWriter打印流
有一个特殊的方法print可以实现打印
write方法是直接将字节和字符写出去
print:首先调用对象的toString方法转成字符串(如果是基本数据类型,会先自动装箱)
再将字符串编码成字节数组,调用write方法写出去


七、SequenceInputStream序列流
可以将多个字节流组合起来
构造方法:SequenceInputStream(Enumeration<? extends InputStream> e)
//Enumeration可以通过Vector来获得,如果用的是ArrayList,如何获得呢?
   SequenceInputStream(InputStream in1,InputStream in2)


八、ObjectInputStream、ObjectOutputStream操作对象的字节流
一般成对出现
使用writeObject方法写入的对象,只能由readObject方法读出来
操作的对象必须实现java.io.Serializable序列化接口,该对象才可以被序列化和反序列化。
序列化: Java中规定的一种保存对象的数据格式


九、DataInputStream、DataOutputStream操作基本数据类型,格式化数据
readInt、writeInt等方法。
writeInt写入一个整数,文件大小为4字节。证明就是把基本数据类型对应的字节写出去了,没有丢失精度


十、ByteArrayInputStream、ByteArrayOutputStream对Byte数组进行读写的字节流,针对内存进行读写
源和目的地都是内存,一般用于对内存中的数据进行处理。


十一、PipedInputStream、PipedOutputStream管道流
1、输入管道流
构造方法:PipedInputStream(PipedOutputStream pos)实现拼接
也可以通过connect(PipedOutputStream pos)方法进行拼接

你可能感兴趣的:(IO流)