Java IO
1 框架图
最重要的就是5个类和三个接口
2 File对象
主要是相关的api
如
File.separator | 路径分隔符 |
---|---|
File (String parent , String chlid) File (File parent , String child) File (String name) | 构造器 |
getName() getPath()等 | |
isFile() exist()等 | |
length | |
createNewFile() delete() |
3. 字节流
标准步骤
- 选择源
- 创建流
- 操作
- 关闭
3.1 ByteArrayInputStream
从内存中获取数据,对象等,不用释放操作系统资源,因此不用关闭
输出时不指定源 输出到一块缓冲区中 用toByteArray()获取字节数组
3.2 BufferedInputStream
inputStream =new BufferedInputStream(new FileInputStream(src));//套上缓冲功能
3.3 数据流和对象流
DataStream和ObjectStream
先写出后读取 按原来的顺序读取
读写数据的同时还保留了类型
DataInputStream dataInputStream=new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(bos.toByteArray())));
对象流还可以传输自定义对象,注意要implements Serializable的对象才可以序列化
transient 让对象某个属性不可以序列化
3.4 打印流
PrintStream
可以自动刷新 打印到System.out 控制台
//重定向输出端
System.setOut(一个打印流);
System.out.println("aaaa");
以后syso的时候就输出到那个打印流去了
//重定向回控制台
System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true)); //FileDescriptor.out 标准输出
4.字符流
BufferedReader
- 使用字符缓冲输入流和字符缓冲输出流 提高性能
- 并使用新增方法(所以不能发生多态) 逐行操作
- string = BufferedReader.readLine())!=null 逐行读取
- write(string) newLine
InputStreamReader
转移流
字节流与字符流之间的转换
- 以字符流的形式操作字节流
- 指定编码解码字符集
- Reader 字节流————》字符流 解码
- Writer 字符流————》字节流 编码
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));)
PrintWriter
构造方法可以跟writer 也可以跟OutputStream
5 文件的分割和合并
5.1 随机访问流
RandomAccessFile 随机读取和写入流
有一个seek(beginPos)方法可以指定从文件的哪里开始读
5.2 序列流
可以将多个输入流当做一个输入流来用
Vector<InputStream> vi =new Vector<>();
for(int i=0;i<dst_path.size();i++) {
vi.add(new BufferedInputStream(new FileInputStream(new File(dst_path.get(i)))));
}
//vector 输入流的容器
//然后生成Sequence流 就可以将多个输入流当成一个输入流来进行操作
SequenceInputStream sis =new SequenceInputStream(vi.elements());
sis.read(flush)依然将每个流挨个读
sis.close()
6. CommonsIo
下载 解压 新建lib文件夹 将commons-io和它的source一起放入lib 右键io选择buildpath,add