Java---File详解

目录

一、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;
      }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值