输入输出流
——JavaIO流
IO的概念
Java IO即Java 输入输出系统。
I(Input)/O(OutPut) 数据的流动
流的分类
1.输入
字节输入流:InPutStream
字符输入流:reader
2.输出
字节输出流:OutPutStream
字符输出流:writer
File类
文件和目录路径名的抽象表示形式。
通过代码对文件进行操作。
File类的构造方法
File(String pathname)
根据一个路径得到File对象
File(String parent, String child)
根据一个目录和一个子文件/目录得到File对象
File(File parent, String child)
根据一个父File对象和一个子文件/目录得到File对象
File类的创建功能
单级文件夹创建
boolean mkdir()
创建文件夹,如果存在这样的文件夹,就不创建了,路径不存在返回flase
多级文件夹创建
boolean mkdirs()
创建文件夹,如果父文件夹不存在,会帮你创建出来
创建文件
boolean createNewFile()
创建文件,路径不存在抛出异常,如果存在这样的文件,就不创建了
File类的获取功能
String getAbsolutePath()
获取文件的绝对路径
File getAbsoluteFile()
获取文件的绝对路径
String getPath()
获取文件的相对路径
String getName()
获取名称
String[] list()
获取指定目录下的所有文件或者文件夹的名称数组
File[] listFiles()
获取指定目录下的所有文件或者文件夹的File数组
File[] listRoots()
获取电脑中的盘符
String[] list (FilenameFilter filter)
获取指定目录下被FilenameFilter筛选后的文件,返回String类型数组
路径: 绝对路径:带盘符的
相对路径:默认就是当前目录 ./:代表当前目录 ../:上一层目录
File类的判断功能
boolean exists()
判断路径表示的文件或者文件夹是否存在
boolean isDirectory()
判断当是否是一个文件夹
boolean isFile()
判断当前是否是一个文件
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。
File类的删除功能
boolean delete()
若是文件就直接删除,若是文件夹则必须是空文件夹
例:
delFileOrDir(new File("F:/xx"));
public static void delFileOrDir(File file) {
if (file.isDirectory()) {//判断有无内容(文件夹)
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
delFileOrDir(file2);//递归调用自己
}
}
file.delete();
}
递归
递归:本质上就是方法自己调用自己
注意: 1.每一次方法的执行都是独立
2.方法出口
案例:
斐波拉契数列,假设有函数f(x)且f(0)=0、f(1)=1,第x个值公式为f(x)=f(x-1)+f(x-2),根据以上给出的条件实现x为任意数时的值的代码实现
public static int f(int x){
if (x == 0) {
return 0;
}else if (x == 1) {
return 1;
}
return f(x-1)+f(x-2);
}
文件的过滤
public interface FilenameFilter
实现此接口的类实例可用于过滤器文件名。
其中的方法:
boolean accept(File dir,String name)
测试指定文件是否应该包含在某一文件列表中。
参数:
dir - 被找到的文件所在的目录。
name - 文件的名称。
示例:
File file = new File("F:/xx");
String[] list = file.list(new MyFiler());
System.out.println(Arrays.toString(list));
class MyFiler implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".doc");
}
}
IO流分类
整体API分类:
按照功能进行API分类:
对文件内容操作
字节流
字节输入流【FileInputStream】
字节输入流读取文件的实现步骤:
关联实体文件,创建FileInputStream对象
调用read方法,返回值:文件末尾 -1
关闭输入流【close】,先开的后关,后开的先关
字节输出流【FileOutputStream】
字节流输出数据的代码实现步骤:
关联实体文件,创建输出流对象
1.文件不存在:自动创建2.路径不存在:报错true:追加false:覆盖
调用write方法
关闭输出流
字符流
字符输入流【FileReader】
字符输入流读取文件的实现步骤:
关联实体文件,创建FileInputStream对象
调用read方法,返回值:文件末尾 -1
关闭输入流【close】,先开的后关,后开的先关
字符输出流【FileWriter】
字节流输出数据的代码实现步骤:
关联实体文件,创建输出流对象
1.文件不存在:自动创建2.路径不存在:报错true:追加false:覆盖
调用write方法
关闭输出流
转化流
使用的场景
在原来的系统上进行升级的时候
字节输入流转换为字符输入流【InputStreamReader】
字节流转成字符流的步骤:
准备一个字节流
将字节流转成字符流输出
关闭流
字节输出流转字符输出流【OutputStreamWriter】
准备一个字符流
将字符流转换为字节流
关闭流