目录
一、File的概述
二、File的创建
三、File的常见成员方法
1:判断和获取
2:创建和删除
(1)createNewFile()
(2)mkdir()
(3)delete()
3:获取并遍历
四:使用File具体实现需求:
(1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件
(2)找出电脑中所有以.avi结尾的文件
(3)删除一个多级文件夹
(4)统计一个文件夹的总大小
(5)统计一个文件夹中每种文件的个数
一、File的概述
File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径。
这个路径可以是存在的,也允许是不存在的。
二、File的创建
public File(String pathname) 根据文件路径创建文件对象 public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象 public File(File parent,String child) 根据父路径对应文件对象和子路径名字符串创建文件 对象
三、File的常见成员方法
1:判断和获取
public boolean isDirectory() 判断此路径名表示的File是否是文件夹 public boolean isFile() 判断此路径名表示的File是否是文件 public boolean exists() 判断此路径名表示的File是否存在 public long length() 返回的是文件的大小(字节数量,/1024是KB,/1024/1024是MB以此类推) public String getAbsolutePath() 返回文件的绝对路径 public String getPath() 返回定义文件时使用的路径 public String getName() 返回文件的名称,带后缀(没有后缀的文件也是存在的,叫纯文本文件) public long lastModified() 返回文件的最后修改时间(时间毫秒值)
2:创建和删除
public boolean createNewFile() 创建一个新的空的文件 public boolean mkdir() 创建单级文件夹 public boolean mkdirs() 创建多级文件夹 public boolean delete() 删除文件、空文件夹 它们的返回值是boolean类型的,也就是是否创建成功
(1)createNewFile()
如果当前路径表示的文件是不存在的,则创建成功,返回true
如果当前路径表示的文件是存在的,则创建失败,方法返回false
如果父级路径不存在,那么方法会有异常IOException
createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件(纯文本文件也是文件)
(2)mkdir()
windwos当中路径是唯一的,如果当前路径已经存在则创建失败,返回false,(文件夹不可和纯文本文件重名,其他文件可以因为是有后缀的)
mkdir只能创建单级文件夹,无法创建多级文件夹(也就是无法在不存在的文件夹下再继续创建文件夹)
创建一个文件夹
(3)delete()
如果删除的是文件则直接删除,不走回收站
如果删除的是空文件夹,则直接删除,不走回收站
如果删除的是有内容的文件夹,则删除失败
3:获取并遍历
public File[] listFiles() 获取当前路径下所有内容 public static File[] listRoots() 列出可用的文件系统根 public String[] list() 获取当前该路径下所有内容 public String[] list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容 public File[] listFiles() 获取当前该路径下所有内容 public File[] listFiles(FileFilter filter) 利用文件名过滤器获取当前该路径下所有内容 public File[] listFiles(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
class Base{ public static void main(String[] args) throws IOException { File s=new File("D:\\MySQL"); File[] ss=s.listFiles(); for(File f:ss) { System.out.println(f); } } }
四:使用File具体实现需求:
(1)定义一个方法找某一个文件夹中,是否有以txt结尾的文件
class Base{ public static void main(String[] args) throws IOException { File fi=new File("D:\\html\\ty"); File[] f=fi.listFiles(); for(File i:f) { System.out.println(i); } System.out.println(findfile(fi)); } public static boolean findfile(File file) { //递归寻找 File[] fi=file.listFiles(); for(File f:fi) { if(f.isFile()) { if(f.getName().endsWith(".txt")) { return true; } } } return false; } }
(2)找出电脑中所有以.avi结尾的文件,并输出
class Base{ public static void main(String[] args) throws IOException { File file =new File("D:\\"); findfile(file); } public static void findfile() { File[] s=File.listRoots(); for(File i:s) { findfile(i); } } public static void findfile(File file) { File[] fi=file.listFiles(); if(fi!=null) { for(File i:fi) { if(i.isFile()) { //是文件 if(i.getName().endsWith(".avi")) { System.out.println(i.getName()); } } else { //是文件夹,开始递归查找 findfile(i); } } } } }
(3)删除一个多级文件夹(前面学到的delete还能删除文件和一个空的文件夹,无法删除有内容的文件夹)
class Base{ public static void main(String[] args) throws IOException { File file =new File("D:\\html\\ty"); del(file); } public static void del(File file) { File[] fi=file.listFiles(); for(File i:fi) { if(i.isFile()) { i.delete(); } else { del(i); } } file.delete(); } }
(4)统计一个文件夹的总大小
class Base{ public static void main(String[] args) throws IOException { File file =new File("D:\\html"); System.out.println(len(file)); } public static long len(File file) { long sum=0; File[] fi=file.listFiles(); for(File i:fi) { if(i.isFile()) { //是文件 sum+=i.length(); } else { //是文件夹 sum+=len(i); } } return sum; } }
(5)统计一个文件夹中每种文件的个数并打印
如下:txt 3个
doc 4个
jpg 6个
class Base{ public static void main(String[] args){ HashMap<String,Integer> map=new HashMap<>(); File file=new File("D:\\ks"); map=findfile(file); Set<Map.Entry<String, Integer>> s=map.entrySet(); for(Map.Entry<String, Integer> i:s) { String key=i.getKey(); Integer val=i.getValue(); System.out.println("键="+key+" 值="+val); } } public static HashMap<String,Integer> findfile(File file){ File[] fi=file.listFiles(); HashMap<String,Integer> ma=new HashMap<>(); for(File f:fi) { if(f.isFile()) { //是文件 String name=f.getName(); String[] s=name.split("\\."); if(s.length>=2) { String ss=s[s.length-1]; if(ma.containsKey(ss)) { int count=ma.get(ss); count++; ma.put(ss, count); } else { ma.put(ss,1); } } } else { //是文件夹 //开始递归查找 Set<Map.Entry<String, Integer>> sonmap=findfile(f).entrySet(); //子文件夹中的各个文件开始一个一个查找 for(Map.Entry<String, Integer> i:sonmap) { String key=i.getKey(); Integer val=i.getValue(); if(ma.containsKey(key)) { val=val+ma.get(key); ma.put(key, val); } else { ma.put(key, val); } } } } return ma; } }