一、IO流概述
IO技术主要用来:处理设备上的数据,处理过程通常存在两端:数据源 数据汇(目的),数据在这两端进行传输,也称之为数据的流动,所以IO技术也叫IO流
IO流是用来处理输入输出解决设备上的数据的传输问题
IO流分类:
1、根据处理数据类型的不同分为:字符流和字节流
2、根据数据流向不同分为:输入流和输出流
二、IO流原理
Jvm会调用所在操作系统完成输入输出动作,使用系统资源,JVm也会暴露出相关的对象提供给开发者,便于使用输入输出工具,这些工具都在java.IO包中
三、file类
java.io.File类用于描述文件和文件夹(目录)。
① 获取文件详细信息
getName()获取文件名称
getPath()获取文件的相对路径
getAbsolutePath()获取文件的绝对路径
lastModified()获取最后一次修改的时间,获取的是毫秒值,所以要转化为文本格式,要自定义一个时间格式
② 文件的创建以及删除
createNewFile()创建文件
mkdir()创建单级目录 mkdirs() 创建多级目录
delete()删除 在删除目录时,若这个目录里面有内容,则删除失败, 因为要符合windows的规则从里面往外面删,要先将目录里面的内容清空才可以删除目录,假如文件存在却还是删除不了这是为什么呢?原因有以下两点:1,文件正在被使用 2,文件是系统文件
exists()判断是否存在
isFile()判断是否是同一个文件
isDirectory()
判断是否是同一个目录
判断是否是同一个目录或文件是要先判断是否存在
③ list和listfile
④ 递归
递归:函数自身调用自身,
注意:1、必须定义条件
2、递归的次数不要太多
小心StackOverFlowReeor栈内存溢出
什么时候使用递归呢?
功能被重复的使用,无论多少次,每次使用功能参数都不同
不要把过滤器对象定义在递归的方法中,因为方法递归会不断的压栈,过滤器对象会创建很多,浪费内存,单独定义一个过滤器,将其作为参数传递给递归方法即可
class FileDemo3 {
public static void main(String[] args)
{
File dir = new File("d:\\java\\javacode");
showdir(dir);
}
public static void showdir(File dir)
{
System.out.println(dir);
File[] files = dir.listFiles();
for(int x = 0; x<files.length;x++)
{
if(files[x].isDirectory())
{
showdir(files[x]);
}
else
System.out.println(files[x]);
}
}
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);
sop(num%2);
}
}
public static int getSum(int num)
{
if(num==1)
return 1;
return num+getSum(num-1);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
四、字节流和字符流
1 .字节流
InputStream ->FileInputStream
OutputStream ->FileOutputStream
2 . 字符流
Reader -> BufferedReader -> LineNumberReader
-> InputStreamReader -> FileReader
Writer -> BufferedWriter
-> OutputStreamWriter -> FileWriter
InputStreamReader OutputStreamWriter 为转换流,FileReader FileWriter为其子类