学习Java第十八天

本文介绍了Java中的Collections工具类,如binarySearch、copy、fill等方法,以及File类的构造、操作文件夹、路径处理和递归应用。重点讲解了如何使用这些工具处理单列和双列集合,以及文件操作的基本流程和递归删除文件夹的案例。
摘要由CSDN通过智能技术生成

一、Colletions集合工具类(了解)

方法的名称

方法的描述

public static int binarySearch(List> list, T key)

查找指定元素在集合中的索引位置

public static void copy(List dest, List src)

将所有元素从一个列表复制到另一个列表

public static void fill(List list, T obj)

使用指定元素替换指定列表中的所有元素

public static int frequency(Collection c, Object o)

返回指定Colletion中等于指定对象的元素数

public static

>T max(Collection coll)

最大值

public static T min(Collection coll,Comparator comp)

最小值

public static void shuffle(List list)

使用默认随机源对指定列表进行置换(随机)

public static void shuffle(List list)

根据元素的自然顺序对指定列表按升序进行排序

public static void swap(List list, int i, int j)

在指定列表的指定位置处交换元素

代码:

package com.gkd.test01; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test01 { public static void main(String[] args) { //实例化集合 List<Integer> li=new ArrayList<>(); //赋值 li.add(10); li.add(3); li.add(66); li.add(-99); li.add(150); //排序 Collections.sort(li); System.out.println(li); //查找指定元素在列表中的索引值 int i = Collections.binarySearch(li, 66); System.out.println(i); //复制元素到新的集合中 List<Integer> list01=new ArrayList<>(); list01.add(1); list01.add(1); list01.add(1); list01.add(1); list01.add(1); list01.add(1); list01.add(1); Collections.copy(list01,li);//前面是目标集合,后面是需要复制的集合 System.out.println(li); System.out.println(list01); //将集合中所有的元素都填充指定的元素 Collections.fill(list01,99); System.out.println(list01); //求出最大最小值 System.out.println(Collections.max(li)); System.out.println(Collections.min(li)); //随机置换 Collections.shuffle(li); System.out.println(li); //交换集合中指定索引的两个元素 Collections.swap(li,0,1); System.out.println(li); } }

二、总结(重点)

单列集合:

双列集合:

三、File(重点)

3.1简介

1、文件和目录路径名的抽象表示形式 ==>将文件或者目录的路径构成一个一个File对象 调用其方法

2、路径:绝对路径和相对路径

3、绝对路径:从根盘符开始的路径就是绝对路径 例如:D:\idea-work\day18\src\com\gkd\test01

4、相对路径:相对具体参照物的路径 idea一般都使用的是相对路径

相对路径:

3.2构造方法

方法名称

方法的描述

public File(File parent, Stringchild)

根据 parent 抽象路径名和 child 路径名字符串创建一个新File 实例

public File(String parent, Stringchild)

根据 parent 路径名字符串和 child 路径名字符串创建一个新File 实例

public File(String pathname)

通过将给定路径名字符串转换为抽象路径名来创建一个新File 实例

代码:

package com.gkd.test02; import java.io.File; public class Test02 { public static void main(String[] args) { //第一种方式实例化File对象 File f = new File("D:\\QF\\admin\\kk"); File f1 = new File(f,"1.txt"); //第二种方式实例化File对象 File f2 = new File("D:\\QF\\admin\\kk","1.txt"); //第三种方式实例化File对象 File f3 = new File("D:\\QF\\admin\\kk\\1.txt"); } }

3.3创建文件以及文件夹

方法的名称

方法的描述

public boolean createNewFile()

创建一个文件

public boolean mkdir(

创建文件夹(一级目录)

public boolean mkdirs()

创建文件夹(多级目录)

package com.gkd.test02; import java.io.File; import java.io.IOException; public class Test01 { public static void main(String[] args) throws IOException { //实例化File,创建文件 File f1=new File("D:\\QF\\admin\\kk\\1.txt"); f1.createNewFile(); //创建文件夹 File f2=new File("D:\\QF\\admin\\ww"); f2.mkdir(); //创建文件夹(多级目录) File f3=new File("D:\\QF\\admin\\zz\\oo"); f3.mkdirs(); } }

3.4案例

step01需求

step02分析

A、创建文件夹(多级目录)

A、创建文件

step03代码

3.5删除文件以及空的文件夹(一级目录)

方法名称

方法的描述

public boolean delete()

删除文件以及空的文件夹

注意点:使用delete删除的文件以及文件夹是不会进入回收站的

代码:

package com.gkd.test02; import java.io.File; public class Test03 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin\\zz\\oo\\1.txt"); //删除文件 f1.delete(); //删除文件夹 File f2=new File("D:\\QF\\admin\\zz\\oo"); f2.delete(); //删除多级文件夹,不能删除多级文件 File f3=new File("D:\\QF\\admin"); f3.delete(); } }

3.6判断性

方法的名称

方法的描述

public boolean exists()

判断文件或者是文件夹是否存在

public boolean isFile()

判断是否是文件

public boolean isDirectory()

判断是否是文件夹

代码:

package com.gkd.test02; import java.io.File; public class Test04 { public static void main(String[] args) { //实例化File File f1=new File("d:\\kk"); System.out.println(f1.exists()); //判断文件夹是否存在 File f2=new File("D:\\QF\\admin\\ww"); System.out.println(f2.exists()); //判断文件是否存在 File f3=new File("D:\\QF\\admin\\zz\\1.txt"); System.out.println(f3.exists()); //判断是否是文件夹 File f4=new File("D:\\QF\\admin\\ww"); System.out.println(f4.isDirectory()); //判断是否是文件 File f5=new File("D:\\QF\\admin\\zz\\1.txt"); System.out.println(f5.isFile()); } }

3.7得到性

方法的名称

方法的描述

public String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串

public String getPath()

返回获取构造方法中路径参数

public String getName()

获取文件的名称

public String getParent()

获取的是父路径

public long length()

获取的是文件内容的长度

代码:

package com.gkd.test02; import java.io.File; public class Test05 { public static void main(String[] args) { //实例化File File f1=new File("D:\\QF\\admin\\zz\\1.txt"); //获取绝对路径 System.out.println(f1.getAbsolutePath()); //获取构造方法的路径 System.out.println(f1.getPath()); //获取文件名称 System.out.println(f1.getName()); //获取父路径的目录 System.out.println(f1.getParent()); //获取文件的内容长度 System.out.println(f1.length()); } }

3.8剪切与重命名

方法的名称

方法的描述

public boolean renameTo(Filedest)

剪切(在不同目录下执行剪切)与重命名(在同一个目录下执行重命名)

代码:

package com.gkd.test02; import java.io.File; public class Test06 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin\\zz\\2.txt"); //实例化File对象 // File f2=new File("D:\\QF\\admin\\zz\\2.txt"); File f2=new File("D:\\QF\\admin\\yy.txt"); f1.renameTo(f2); } }

3.9过滤

方法的名称

方法的描述

public String[] list()

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录(返回时一级目录下所有的文件以及文件夹的路径)

public File[] listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

public String[]list(FilenameFilterfilter)

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

public File[]listFiles(FilenameFilterfilter)

返回执行文件夹下的(过滤后)所有的文件对象

代码-01-测试类

package com.gkd.test03; import java.io.File; public class Test01 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin"); //获取文件下所有文件路径 String[] list = f1.list(); //使用循环遍历 for (String s:list){ System.out.println(s); } } }

代码-02-测试类

package com.gkd.test03; import java.io.File; public class Test02 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin"); //获取文件下所有文件路径 File[] files = f1.listFiles(); for (File f:files){ System.out.println(f.getName()); } } }

代码-03-测试类

package com.gkd.test03; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; public class Test03 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin"); String[] list = f1.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //dir 上一级目录 //name 文件名称 //如果返回值时true则存入数组 否则不存入 if (name.endsWith("png")||name.endsWith("jpeg")||name.endsWith("gif")||name.endsWith("jpg")){ return true; } return false; } }); System.out.println(Arrays.toString(list)); } }

代码-04-测试类

package com.gkd.test03; import java.io.File; import java.io.FilenameFilter; public class Test04 { public static void main(String[] args) { //实例化File对象 File f1=new File("D:\\QF\\admin"); File[] files = f1.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { if (name.endsWith("png")||name.endsWith("jpeg")||name.endsWith("gif")||name.endsWith("jpg")){ return true; } return false; } }); for (File f:files){ System.out.println(f.getName()); } } }

3.9.1案例

step01需求:

step02分析:

A.实例化Scanner

B.根据路径构建一个文件对象

C.调用方法public boolean exists()public boolean isDirectory()

D.使用过滤方法 获取所有后缀名为java的 文件内容长度 > 20k public long length()

E.使用循环 do while循环

step03-代码:

package com.gkd.test03; import java.io.File; import java.io.FilenameFilter; import java.util.Scanner; public class Test05 { public static void main(String[] args) { //实例化Scanner Scanner input=new Scanner(System.in); //定义一个标记 boolean flag=true; do { System.out.println("请输入文件的路径:"); String path=input.next(); File f1=new File(path); //判断路径或者文件是否存在 if (f1.exists()){ //判断是否时文件夹 if (f1.isDirectory()){ //获取当前目录下所有的文件 f1.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //重新创建一个文件对象,这样子才能获取其长度 File f2=new File(dir,name); //判断其是否是Java文件并且文件长度大于20k if (f2.getName().endsWith(".java")&&f2.length()>20*1024){ System.out.println(f2.getAbsolutePath()); return true; } return false; } }); //将标记设置为false flag=false; }else { System.out.println("不是文件夹,请重新输入!"); System.out.println("-----------------------------"); } }else { System.out.println("文件不存在,请重新输入!"); System.out.println("======================================"); } }while (flag); } }

四、递归(了解)

4.1简介

1、递归:递:传递 归:归还 归一 在开发中递归 就是方法反复自己调用自己 朝着不递归方法发展 方法的参数会逐渐变下

2、特点:方法自己调用自己

3、注意点:

A、朝着不递归方法发展 方法的参数会逐渐变小

B、递归可能会产生栈内存溢出

4.2数学中的递归

package com.gkd.test03; public class Test06 { public static void main(String[] args) { System.out.println(showInfo(5)); } public static int showInfo(int num){ if (num==1){ return 1; }else { return num*showInfo(num-1); } } }

package com.gkd.test03; public class Test07 { public static void main(String[] args) { System.out.println(showInfo(20)); } public static int showInfo(int num){ if (num==1){ return 1; }else if (num==2){ return 1; }else { return showInfo(num-1)+showInfo(num-2); } } }

4.3递归的内存图

4.4案例

step01需求:使用递归删除一个文件夹下所有文件(包括自身)

step02分析

A、删除文件 delete()

B、获取当前文件夹下所有的文件 public File[] listFiles()

C、使用循环遍历所有文件

如果是文件夹 需要进行递归

如果是文件 直接清除

D、删除自身文件夹

step03-代码

package com.gkd.test03; import java.io.File; public class Test08 { public static void main(String[] args) { deleteFile(new File("D:\\ceshi")); } public static void deleteFile(File file){ //判断是否是文件夹 File[] f1 = file.listFiles(); //使用循环遍历数组 for (File f2:f1){ if (f2.isDirectory()){ //递归调用 deleteFile(f2); }else { //删除文件 f2.delete(); } } //删除文件夹本身 file.delete(); } }

4.5案例

step01需求:获取C盘下所有的图片

step02分析:

A、获取C盘所有的文件 包括文件夹

B、判断是否是文件夹

如果是就继续递归调用

如果不是直接判断文件后缀名 是否 是图片的格式

step03代码:

package com.gkd.test03; import java.io.File; public class Test09 { public static void main(String[] args) { showInfo(new File("d:\\")); } public static void showInfo(File fi){ //对文件对象判断是否为空 if ( fi !=null){ //判断是否是文件夹 if (fi.isDirectory()){ //获取当前文件夹的所有文件 File[] f1 = fi.listFiles(); //对数组判断是否为空 if (f1!=null&&f1.length>0){ //使用循环遍历 for (File f:f1){ //使用递归 showInfo(f); if (f.getName().endsWith("png")||f.getName().endsWith("gif")||f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")){ System.out.println(f.getName()); } } } } } } }

4.6IDEA相对路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值