博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA_IO
阅读量:5055 次
发布时间:2019-06-12

本文共 4101 字,大约阅读时间需要 13 分钟。

1 File

  • File可以将程序和电脑的文件夹或者文件关联起来

相对路径

绝对路径

2 基本概念

分类

image

  • 流向

输入流,输出流

  • 数据

字节流:二进制,可以使一切文件包括文件,文本音视频

字符流:文本文件,只可以处理纯文本

  • 功能

节点流:包裹源头

处理流:增强功能,提供性能

字节流和字符流

  1. 字节流
  • 输入流
InputStream;read(byte[] b)read(byte[] b,int off,int len);close();
  • 输出流
OutputStream;write(byte[] b) + flush() + close()
  1. 字符流
  • 输入流:Reader
read(char[] buffer)
  • 输出流:Writer
write(byte[] buffer)+flush()+close()

2 字节流

步骤

  • 建立与文件的联系
  • 选择对应流
  • 读取|写出
  • 数组大小读取或者写出
  • 释放资源

读取文件与写出文件与拷贝

  • 读取
// 建立联系        File file = new File("F://zhao.txt");        // 选择流        InputStream inputStream = new FileInputStream(file);        // 读取的大小每次        byte[] b = new byte[10];                int len = 0;// 实际读取的字节数        while((len = inputStream.read(b)) != -1){            System.out.println(len);        }        inputStream.close();
  • 写入文件
FileOutputStream(File file) // 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。FileOutputStream(File file, boolean append) //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。FileOutputStream(String name) //   创建一个向具有指定名称的文件中写入数据的输出文件流。FileOutputStream(String name, boolean append) // 创建一个向具有指定 name 的文件中写入数据的输出文件流。// f://zhaodi.txt在写的时候自动创建这个文件        OutputStream os = new FileOutputStream(new File("f://zhaodi.txt"),true);        String info ="zhaodi  is 赵迪";        // 字符串转字节        byte[] data = info.getBytes();        os.write(data);        os.flush();
  • 拷贝文件

就是先读取一个文件,然后写到另一个文件

InputStream is = null;        OutputStream os = null;        os = new FileOutputStream("f://zhaodiishao.txt",true);        is = new FileInputStream(new File("f://zhao.txt"));                byte[] car = new byte[1024];        int len = 0;        while((len = is.read(car)) != -1){            os.write(car);        }        os.flush();        is.close();        os.close();
  • 拷贝文件夹

3 字符流

只可以操作纯文本

步骤:

  • 建立联系
  • 选择流 Writer、Reader
  • 读取|写出 ==char[] data = new char[10]== 注意这里是字符数组!!
  • 关闭

原理同字节流,此处省略

4 处理流

  • 节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对其它流进行处理(提高效率或者操作灵活性)
  • 记住处理流是对其它流的处理哦
  • 提高性能,增强功能

字节缓冲流

  • 字节缓冲流

没有加入新的方法

InputStream is = null;        OutputStream os = null;        os = new BufferedOutputStream(new FileOutputStream("f://zhaodiishao.txt",true));        is = new BufferedInputStream(new FileInputStream(new File("f://zhao.txt")));                byte[] car = new byte[1024];        int len = 0;        while((len = is.read(car)) != -1){            os.write(car);        }        os.flush();        is.close();        os.close();

字符缓冲流

加入新的重要的方法

readLine() //读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 nullnewLine() // 写入一个行分隔符
// 选择流        BufferedReader bufferedReader = null;// 多态是不可以访问新增加的方法的所以这里不可以使用多态        BufferedWriter bufferedWriter = null;                try {            // 包装节点流            bufferedReader = new BufferedReader(new FileReader(new File("f://zhao.txt")));            bufferedWriter = new BufferedWriter(new FileWriter(new File("f://zhaozhao.txt")));                                    String line_info = null;            // 读取  写入            while((line_info=bufferedReader.readLine())!=null){                bufferedWriter.write(line_info);                bufferedWriter.newLine();            }            bufferedWriter.flush();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally {            try {                // 关闭                bufferedReader.close();                bufferedWriter.close();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }

转换流

作用

  • 字节流转换为字符流
  • 处理乱码编码集
  • 解码

编码

graph LR字符-->二进制

解码

graph LR二进制-->字符

乱码出现原因

  • 编码与解码的字符集不统一
String user_name = "zhaodi 赵迪";        // 编码        byte[] data = user_name.getBytes("utf-8");        // 解码        String user_name1 = new String(data,"utf-8");        System.out.println(user_name1);
  • 字节缺少,长度丢失

5 序列化,反序列化

程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终止,那么对象是肯定不会存在的,但是有时候,我们需要再程序终止时保存对象的状态信息,之后程序再次运行时可以重新恢复到之前的状态,如,玩家玩游戏退出时,需要保存玩家的状态信息(如等级、装备等等),之后玩家再此登入时,必须要恢复这些状态信息。我们可以通过数据库手段来达到这个保存状态的目的,在Java中,我们有更简便的方法进行处理,那就是序列化与反序列化。序列化是一种对象持久化的手段,反序列化与序列化相反,其是通过序列化后的信息重新组装成对象。

-序列化 需要实现Serializable 接口,反序列化不需要

转载于:https://www.cnblogs.com/zhaod/p/8351693.html

你可能感兴趣的文章
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>