前言
IO流是用于读写文件中的数据,要读写文件之前可以创建文件获取文件对象再创建IO流,正文会先介绍File类,通过File类的构造方法获取文件的对象,创建文件或目录以及File类的一些方法获取文件对象的属性。后面还介绍了相关的IO流体系,字节流和字符流的区别用法。
目录
一、File
1.常用的成员方法
(1) 判断、获取
注意: 1.length返回文件的大小(字节数量)
细节1:这个方法只能获取文件的大小,单位是字节
如果单位我们要是M,G,可以不断的除以1024
细节2:这个方法无法获取文件夹的大小
如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。
2.getName获取名字
细节1:file是文件会返回文件的文件名和扩展名(如.txt .cpp)
细节2:file是文件夹就返回文件夹的名字。
(2)创建、删除
注意:1.createNewFile创建一个新的空的文件
细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true
如果当前路径表示的文件是存在的,则创建失败,方法返回false
细节2:如果父级路径是不存在的,那么方法会有异常IOException
细节3:createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
2.mkdir创建一个文件夹(目录)
细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。
3. mkdirs创建多级文件夹
细节:既可以创建单级的,又可以创建多级的文件夹
4.delete删除文件、空文件夹
细节:如果删除的是文件,则直接删除,不走回收站。
如果删除的是空文件夹,则直接删除,不走回收站
如果删除的是有内容的文件夹,则删除失败
(3)获取并遍历
注意:细节:
![]()
//1.创建File对象
File f = new File("D:\\aaa");
//2.listFiles方法
//作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回
File[] files = f.listFiles();
for (File file:files) {
//file依次表示aaa文件夹里面的每一个文件或者文件夹
System.out.println(file);
}
2. 实操
(1)遍历C盘下的以.avi结尾的文件
递归,一定要先用if判断文件数组是否为空,否则会抛出空指针异常
(2)删除一个多级文件夹(里面的有些文件有内容)
(3)统计各种文件的数量
/*
* 作用:
* 统计一个文件夹中每种文件的个数
* 参数:
* 要统计的那个文件夹
* 返回值:
* 用来统计map集合
* 键:后缀名 值:次数
*
* a.txt
* a.a.txt
* aaa(不需要统计的)
*
*
* */
public static HashMap<String,Integer> getCount(File src){
//1.定义集合用来统计
HashMap<String,Integer> hm = new HashMap<>();
//2.进入src文件夹
File[] files = src.listFiles();
//3.遍历数组
for (File file : files) {
//4.判断,如果是文件,统计
if(file.isFile()){
//a.txt
String name = file.getName();
String[] arr = name.split("\\.");
if(arr.length >= 2){
String endName = arr[arr.length - 1];
if(hm.containsKey(endName)){
//存在
int count = hm.get(endName);
count++;
hm.put(endName,count);
}else{
//不存在
hm.put(endName,1);
}
}
}else{
//5.判断,如果是文件夹,递归
//sonMap里面是子文件中每一种文件的个数
HashMap<String, Integer> sonMap = getCount(file);
//hm: txt=1 jpg=2 doc=3
//sonMap: txt=3 jpg=1
//遍历sonMap把里面的值累加到hm当中
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
int value = entry.getValue();
if(hm.containsKey(key)){
//存在
int count = hm.get(key);
count = count + value;
hm.put(key,count);
}else{
//不存在
hm.put(key,value);
}
}
}
}
return hm;
}
}