一、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相对路径