第十七天学习笔记

File

1.文件基本常识

绝对路径:c\...\...   这种形式的

相对路径:...\...\...  这种形式的

2.创建文件方法

代码:

public static void main(String[] args) {
    //创建一个文件对象,全路径的方式
    File file1= new File("C:\\Users\\31127\\Desktop\\StudyPic.png");
    //字符串和字符串拼接的方式
    String str1 =" C:\\Users\\31127\\Desktop";
    String str2 = "StudyPic.png";
    File file2 = new File(str1+"\\"+str2); //中间记得加   \\ ,因为路径规则是这样的
    //目录文件 + 字符串
     File file3 = new File(str1);
     File file4 = new File(file3,str2);

    System.out.println(file1);
    System.out.println(file2);
    System.out.println(file4);
}

结果:

C:\Users\31127\Desktop\StudyPic.png
 C:\Users\31127\Desktop\StudyPic.png
 C:\Users\31127\Desktop\StudyPic.png

3.总结

4.方法以及实现

代码实现

//以下是文件的方法实现

//判断是否为文件夹
System.out.println(file2.isDirectory());
System.out.println(file5.isDirectory());
//判断是否为文件
System.out.println(file1.isFile());
//判断文件是否存在
System.out.println(file2.exists());
//得到文件的大小值,而且获得的是字节数。只能获得的文件的,无法获得文件夹的
long fileLong = file2.length();   // long类型的,要得到准确的几M要转double型的
System.out.println(fileLong);
long file5long = file5.length();  //为什么这个能获取得到???
System.out.println(file5long);

//得到创建时候用的路径
System.out.println(file2.getPath());
//得到绝对路径
System.out.println(file2.getAbsoluteFile());
//得到文件的名称,若是文件则带后缀,若是文件夹则不带
System.out.println(file2.getName());
System.out.println(file5.getName());


5.文件删除和创建


1.createNewFile 创建一个新的空的文件
细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true/ l如果当前路径表示的文件是存在的,则创建失败,方法返回false

细节2:如果父级路径是不存在的,那么方法会有异常IOException
细节3: createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件

代码实现

//创建文件,带后缀
//细节:有后缀名直接创建带后缀名的文件,没有则是空文件
File file6 = new File("D:\\JavaStudyDir\\a.txt");
boolean flag1 = file6.createNewFile();
System.out.println(flag1);
//创建文件,不带后缀
File file7 = new File("D:\\JavaStudyDir\\a");
boolean flag2 = file6.createNewFile();
System.out.println(flag2);

mkdir:

细节1: windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false

细节2: mkdir方法只能创建单级文件夹,无法创建多级文件夹。

3.mkdirs创建多级文件夹
细节:既可以创建单级的,又可以创建多级的文件夹

//创建单级文件夹
File file8 = new File("D:\\JavaStudyDir\\aaa");
boolean flag3 = file8.mkdirs();
System.out.println(flag3);
//创建多级文件夹,不是多个
File file9 = new File("D:\\JavaStudyDir\\bbb\\ccc\\ddd");
boolean flag4 = file9.mkdirs();
System.out.println(flag4);

删除细节:
1.如果删除的是文件,则直接删除,不走回收站。

2.如果删除的是空文件夹,则直接删除,不走回收站

3.如果删除的是有内容的文件夹,则删除失败,例如:多级文件不能删除,因为多级里面算是有文件(多级不是指多个)

//删除文件以及文件夹
System.out.println(file6.delete());
System.out.println(file7.delete());
System.out.println(file8.delete());
System.out.println(file9.delete());

6.遍历

代码实现

 //遍历文件夹
File file10 = new File("D:\\JavaStudyDir");
 for (File file : file10.listFiles()) {
     System.out.println(file);
 }

掌握蓝色字体的方法,其他看明白即可

7.练习

a


//需求:
//在当前模块下的aaa文件夹中创建一个a.txt文件
File file1 = new File("D:\\JavaStudyDir\\a.txt");
File file2 = new File("D:\\JavaStudyDir\\b.txt");
boolean flag1 = file1.createNewFile();
boolean flag2 = file2.createNewFile();
System.out.println(flag1);
System.out.println(flag2);

b.

//需求:
//定义一个方法找某一个文件夹中,是否有以avi结尾的电影。(暂时不需要考虑子文件夹)
File file3 = new File("D:\\JavaStudyDir");
File[] files = file3.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.isFile()&&pathname.getName().endsWith(".avi");
    }
});
for (File file : files) {
    System.out.println(file);
}

c.

 //需求:
 //找到电脑中所有以avi结尾的电影。(需要考虑子文件夹)
 //第一步,得到所有盘文件
 File[] fileLoots = File.listRoots();
for (File fileLoot : fileLoots) {
   getTxt(fileLoot);
 }
 //需求
 //D:\JavaStudyDir\aaa\bbb\ccc\ddd\eee\fff\ggg
 //删除一个多级文件夹
 System.out.println("hahahah");
File fileDeleMany = new File("D:\\JavaStudyDir");

delMany(fileDeleMany);



这是方法代码
 public static void getTxt(File files){
        //遍历当前文件夹
        File[] filestwo = files.listFiles();
        //如果不为空   因为如果路径错了和不存在,以及扫描到需要权限的文件夹返回的都是空。但是长度为0的数组还是可以遍历的。         
       if(filestwo != null){
        for (File file : filestwo) {
            //如果后缀名为avi则打印
            if(file.isFile()&&file.getName().endsWith(".avi")){
                System.out.println(file);
            }
            //递归查找文件夹
            else if (file.isDirectory()) {
                getTxt(file);
            }

        }
    }

}
  

d.

 //需求
 //D:\JavaStudyDir\aaa\bbb\ccc\ddd\eee\fff\ggg
 //删除一个多级文件夹
 System.out.println("hahahah");
File fileDeleMany = new File("D:\\JavaStudyDir");

delMany(fileDeleMany);

这是方法代码

public static void delMany(File file){

   File[] files = file.listFiles();
    for (File file1 : files) {
        if(file1.isFile() ){
            System.out.println(file1.delete());
        } else{
            delMany(file1);
        }

    }
    System.out.println(file.delete());
  }

e

//需求:
//统计一个文件夹的总大小
File file = new File("D:\\JavaStudyDir");
System.out.println(getDir(file));

//这是方法

public static long getDir(File file){

    File[] files = file.listFiles();
    if (files == null){
        System.out.println("出错的原因可能是:路径名出错,文件不存在,需要权限");
    }else {
        for (File file1 : files) {
            if(file1.isFile()){
                count = count+file1.length();
            }else {
                getDir(file1);
            }
        }
    }
    return count;
}

f

//需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)打印格式如下:
//②      txt:3个
//3      doc:4个
//④     jpg:6个


File file = new File("D:\\JavaStudyDir");
getNum(file);
public static void getNum(File file){
    //创建Map集合去接受出现的文件名
    Map<String,Integer> map = new TreeMap<>();
    File[] files = file.listFiles();
    if(files.length !=0 && files != null) {
        for (File file1 : files) {
            if (file1.isFile() ) {
                String[] strs = file1.getName().split("\\.");
                int length = strs.length;
                if (map.containsKey(strs[length - 1])) {
                    int aimNum = map.get(strs[length - 1]) + 1;
                    map.put(strs[length - 1], aimNum);

                } else {
                    Integer start = 1;
                    map.put(strs[length - 1], start);
                }


            }else{
                getNum(file1);
            }
        }

    }
    Set<Map.Entry<String, Integer>> entries = map.entrySet();
    entries.stream().forEach(new Consumer<Map.Entry<String, Integer>>() {
        @Override
        public void accept(Map.Entry<String, Integer> stringIntegerEntry) {
            System.out.println(stringIntegerEntry);
        }
    });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值