一.Java IO流:
当需要把内存中的数据存储到持久化设备(硬盘、光盘、U盘等)上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
1.File类:
————*File类
------1.定义及构造方法:
import java.io.File;
/*
* java.io.File
* 表示操作系统上 文件 目录 路径名的类
* 文件:File 存储数据
* 目录:Directory 文件夹 存储文件 区分文件
* 路径:Path 路径 定位文件文件夹
* File类特点:平台无关性
*
* File类的静态常量
* static String pathSeparator 与系统有关的路径分隔符
* static String separator 与系统有关的默认名称分隔符
*
*
* uri 统一资源标识符
* 包括url
* thrunder:
* ed2k:
* mailto:123@qq.com
*
* url 统一资源定位符
* http:\\www.baidu.com
*
/*
------File的构造方法
*
* 绝对路径
* 从盘符开始的路径都是绝对路径 绝对路径具备唯一性
* d:\\work\\abc
* 相对路径
* d:\\work\\abc
* d:\\work
* d:\\work\\day04
*
* 父路径具备唯一性 子路径没限制
*/
public class Demo02_File {
public static void main(String[] args) {
/*
* File(String path)
* 根据字符串路径 创建一个File对象
* 路径可以是文件 也可以是文件夹
* 创建对象时,不会验证该路径是否存在
*
*/
----- File类创建方法
*
* windows不区分大小写
* 不可以用后缀名 判断一个文件 是文件还是文件夹
* 即使类型不同 名字也不能完全一样
*
------- File的删除方法
* boolean delete() 可以删除文件或文件夹
* 删除成功true 删除失败为false
* 要删除的文件路径在构造方法中给出
* java的删除一般都不走回收站
* 永久性删除
* 操作有风险 运行需谨慎
* 如果删除的是文件 即使文件中有数据 也会被删除
* 但是如果删除的是文件夹 如果文件夹内有东西 删除不掉
*
*/
------File类的判断方法
/*
* boolean exists()
* 判断路径是否存在
* 如果存在返回 true 如果不存在返回false
*/
判断当前路径是否是文件夹
* boolean isFile()
* 判断当前路径是否是文件
* 如果是文件返回true
* 但是如果 文件不存在返回
false
* 如果文件是文件夹返回false
*/
------- File的获取方法
* File getAbsoluteFile() 推荐
* String getAbsolutePath()
* 获取文件对象的绝对路径
*/
/*
* String getPath()
* 获取文件路径的方法
* 获取在构造方法中给出的路径的字符串
*/
/*
* String getParent()
* File getParentFile()
* 获取父目录
*/
/*
* String getName()
* 获取文件名
*/
/*
* long length()
* 获取文件的字节数
* 不能返回文件夹的
*/
-----2 File类list开头的方法
String[] list() 返回当前文件夹下 所有的文件名的数组 包含隐藏文件
* File[] listFiles() 返回当前文件夹下 所有文件的对象
*
* static File[] listRoots() 返回计算上所有的盘符
-------3.文件过滤器
文件过滤器
* 获取一个文件夹下所有.java文件
* File[] listFiles(FileFilter filter)
*/
2.字节流图解:
字节输出流 OutputStream
特点: 写任意的文件
方法: 写出数据的方法: write
write(int b) 写出1个字节 127 -128 之间
write(byte[] b) 写出字节数组
write(byte[] b,int off,int len) 写出字节数组一部分 开始索引,写出的个数
close() 关闭流,释放资源
子类: FileOuputStream
构造方法:
FileOutputStream(File file) 传递File对象,数据目的
FileOutputStream(String filename) 传递字符串的文件名作为数据目的
IO字节流写数据步骤
1. 创建流对象的对象,构造方法中绑定数据目的
2. 调用方法write写
3. 关闭资源
字节输入流 InputStream
特点:读取字节数据,读取任意的文件
方法: 读取数据的方法:read
int read() 读取1个字节
int read(byte[] b) 读取字节数组
子类: FileInputStream
构造方法:
FileInputStream(File file)传递File对象,此流读取的数据源
FileInputStream(String filename)传递字符串文件名,此流读取的数据源
输入流读取数据步骤
1. 创建字节输入流对象,构造方法中,绑定数据源
2. 调用方法read读取
3. 输出读取的结果
4. 释放资源
注意:read(): 调用一次,自动向后读1个字节,文件末尾-1
字节输出流的缓冲流:
java.io.BufferedOutputStream
继承OutputStream 就是一个字节输出流
方法: 来自于父类OutputStream
write 字节, 字节数组
构造方法:
BufferedOutputStream (OutputStream out)
传递我任意的字节输出流,传递来的是谁,就缓冲谁,提高效率
只能传递 FileOutputStream
字节输入流的缓冲流
java.io.BufferedInputStream
继承InputStream, 也是字节输入流
读取的方法: read 单个字节,字节数组
构造方法:
BufferedInputStream (InputStream in)
传递任意的字节输入流,传递的是谁,就对谁高效 FileInputStream
___________字符转换流_______________
——*OutputStreamWriter类
java.io.OutputStreamWriter extends Writer
字符通往字节的桥梁
* 特点 可以指定编码表 继承了Writer所以可以使用父类的write方法
write一个字符
write一个字符数组 write一个字符数组的一部分
write一个字符串
* 构造方法 绑定数据目的
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
参数
OutputStream out 所有字节输出流的超类,可以传入其任意子类对象
FileOutputStream
String charsetName 指定字符串类型的编码表,编码表不区分大小写
UTF-8 GBK
——* InputStreamReader类
ava.io.InputStreamReader extends Reader 字节通往字符的桥梁
* 特点 可以指定编码 继承自Reader可以调用Reader的read方法
* read一个字符
* read一个字符数组
*
* 构造方法
* InputStreamReader(InputStream in)
* InputStreamReader(InputStream in, String charsetName)
* 参数
* InputStream in 所有字节输入流的超类,可以传入其任意子类对象
* FileInputStream
* String charsetName 指定字符串类型的编码表,编码表不区分大小写
* UTF-8 GBK
——*对象的序列化流
ObjectOutputStream:
构造方法:
* ObjectOutputStream(OutputStream out)
* 参数
* OutputStream out 所有字节输出流超类,可以传入其任意子类对象
* FileOutputStream
* 方法
* void writeObject(Object obj) 写对象
——*对象的反序列化流
java.io.ObjectInputStream :
* 构造方法
* ObjectInputStream(InputStream in)
* 参数
* InputStream in 所有字节输入流的超类,可以传入其任意子类对象
* FileInputStream
* 方法
* Object readObject() 读对象
*
——打印流——
——*字节打印流 PrintStream
——*字符打印流 PrintWriter(常用)
打印流的特点:1.只负责输出目的端
2.打印流不会抛出IO异常 可能抛其他异常
3.打印流为其他流添加了功能
构造方法绑定数据目的
* PrintStream构造方法可以接收:
String路径 File对象 所有字节输出流
* PrintWriter构造方法可以接收:
String路径
File对象
所有字符输出流 所有字节输出流
*方法:
void print(xxx xx) 不换行打印 原样输出
void println(xxx xx) 换行打印
*打印流可以开启自动刷新:
前提
1.构造方法必须接收的是流对象:
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)
如果
autoFlush为true 则开启了自动刷新
2.只有 printf println format三个方法可以自动刷新
———Properties属性集合类(双列集合)———
*—特点:
1、Hashtable的子类,map集合中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3.唯一一个可以和IO流直接结合使用
*—方法:
setProperty(String key, String value) 添加元素
String getProperty(String key) 根据键找值
Set<String> stringPropertyNames() 获取所有key的Set集合
*—Properties和IO流结合使用
方法:
void load(InputStream inStream) 将文件中的键值对加载进集合
void load(Reader reader)
参数:
任意输入流对象 字节输入流 字符输入流
void store(OutputStream out, String comments) 将集合中的键值对 写入文件中
void store(Writer writer, String comments)
参数:
任意输出流对象 字节输出流 字符输出流
——— commons.io.(非系统包)
导包:import org.apache.commons.io.FileUtils;
*—FileUtils类的方法:
1. static String readFileToString(File file) 读取文件转换为字符串
2.static void writeStringToFile(File file, String data) 将字符串写入文件
3.static void copyFile(File srcFile, File destFile) 复制文件
4.static void copyDirectoryToDirectory(File srcDir, File destDir) 复制多级文件夹