IO流: 数据的读入写出,文件的上传下载 流: 一连串流动的数据,以先入先出的方式进行传输-->流就是管道 数据源---->io---->目的地 数据源 : 数据的来源 目的地 : 数据流向的位置 流的分类: 操作单元分: 字节流 : 万能流 ***** 字符流 : 纯文本内容 流向分: 以程序为中心 输入流 输出流 功能分: 节点流 : 真实能做读入写出的 功能流 : 增强节点流的功能,提高节点流的性能 流之间的分类是相辅相成的 java.io包 InputStream 字节输入流中最上层父类 文件流 : FileInputStream 文件字节输入流->节点流 字节流 输入流 操作文件,数据源为文件,使用文件字节输入流 字节数组流 : ByteArrayInputStream 字节数组输入流 ->节点流 字节流 输入流 操作字节数组,数据源是字节输入,使用字节数组输入流
OutputStream 字节流输出流 FileOutputStream 文件字节输出流 -> 节点流 目的地为文件 ByteArrayOutputStream 字节数组输出流 -> 节点流 目的地为字节数组 注意: 在输出流写出的时候,如果目的地文件不存在,系统会自动创建目的地文件,如果目的地文件所在路径不存在,抛出异常java.io.FileNotFoundException:(系统找不到指定的路径。)
字节流实现文件拷贝: ***** 数据源-->输入流-->程序-->输出流-->目的地 步骤: 1.构建流(输入流 输出流) 2.读入写出 3.刷出 4.关闭 (后打开的先关闭)
字符流 (纯文本数据) Reader 字符输入流 FileReader 文件字符输入流 ->节点流 Writer 字符输出流 FileWriter 文件字符输出流 ->节点流 通过字符流实现文件拷贝
功能流 : 使用:包裹节点流使用 缓冲流 Buffered : 加快节点流的读写效率 字节缓冲流 : 字节输入缓冲流 BufferedInputStream 字节输出缓冲流 BufferedOutputStream 无新增方法,可以发生多态 字符缓冲流
字符流缓冲流 字符输入缓冲流 BufferedReader 新增功能: String readLine() 读一行文字。 字符输出缓冲流 BufferedWriter 新增功能: void newLine() 写一个行分隔符。 存在新增功能,不能发生多态
功能流 : Data流 | 基本数据类型流 : 读写数据+保留数据类型->基本数据类型|字符串 是字节流的功能流 DataInputStream Data输入流 新增功能 : readXxx() DataOuutputStream Data输出流 新增功能 : writeXxx() 注意: 读入与写出的顺序保持一致 读入数据的时候必须从源文件中读入,否则抛出异常 java.io.EOFException
Object流|对象流|引用数据类型流 字节流的功能流 ObjectInputStream 反序列化输入流 新增方法 Object readObject() 从ObjectInputStream中读取一个对象。 等等 ObjectOutputStream 序列化输出流 新增方法 void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。 序列化: 将对象数据转为可存储或者可传输的状态的过程 不是所有类型的数据都能序列化 java.io.Serializable 如果写出的对象类型没有实现序列化接口,会遇到运行时异常java.io.NotSerializableException 序列化与反序列化顺序保持一致 不是所有的属性都需要序列化 transient static的成员不会被序列化 如果父类实现类序列化接口,子类所有内容都可以进行序列化 子类实现了序列化接口,只能序列化子类独有的内容 序列号: 当实现了序列化的类型默认存在一个序列号 当类中的成员发生改变,序列号默认会重新生成 作用: 使用序列号可以实现检查前后版本不一致问题 解决不同版本的兼容问题: 手动设置序列号 通过快捷键生成序列号: 1.类型必须实现了序列化接口 2.Setting中进行配置 3.双击类名alt+enter,自动生成序列号
CommonsIO 是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等。 是一个第三方的开源组件 使用第三方组件的步骤: 1.对应官网中下载源码 jar 2.在项目下新建一个文件夹目录lib,lib下存放以后项目所依赖的所有jar包 3.选中jar包,右键add as lib... 4.在项目下对应类中进行使用
//#### IO工具类IOUtils //`IOUtils.copy(InputStream input, OutputStream output) `// 此方法有多个重载方法,满足不同的输入输出流
//IO 工具类 FilenameUtils //`FilenameUtils.getBaseName(String filename)` // 去除目录和后缀后的文件名
FilenameUtils.getExtension(String filename)` // 获取文件的后缀
isExtension(String fileName, String text) `// 判断fileName是否是text后缀名
IO 工具类 FileUtils //`FileUtils.copyFile(File srcFile, File destFile)` // 复制文件
FileUtils.copyFileToDirectory(File srcFile, File destDir)` // 复制文件到一个指定的目录
FileUtils.writeStringToFile(File file, String data, String encoding, boolean append)`// 指定知否追加
FileUtils.deleteDirectory(File directory)` // 删除文件夹,包括文件夹和文件夹里面所有的文件
FileUtils.copyDirectory(File srcDir, File destDir)` // 复制文件夹(文件夹里面的文件内容也会复制)
FileUtils.copyDirectoryToDirectory(File srcDir, File destDir)` // 以子目录的形式将文件夹复制到到另一个文件夹下
FileUtils.copyDirectory(File srcDir, File destDir, FileFilter filter)` // 复制文件夹,带有文件过滤功能