File(十七) File对象 表示路径,可以是文件,可以是文件夹,该路径可存在,可不存在。
绝对路径 :绝对路径是带盘符的。
相对路径 :相对路径不带盘符,默认到当前项目下去找。
构造方法 1 2 3 4 5 6 7 8 9 10 11 //格式1 public File(String pathname) 把字符串表示的路径变成File对象 //格式2 public File(String parent,String child) 把父级路径和子级路径进行拼接 //格式3 public File(File parent,String child) //把父级路径对应文件对象和子级路径进行拼接
范例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import java.io.File; public class Test{ public static void main(String[] args){ //public File(String pathname) String pathname="d:\\javafiletest\\a.txt"; File file1=new File(pathname); System.out.println(file1); //public File(String parent,String child) String parent1="d:\\javafiletest"; String child1="a.txt"; File file2=new File(parent1,child1); System.out.println(file2); //public File(File parent,String child) File file3=new File("d:\\javafiletest"); String child2="a.txt"; File file4=new File(file3,child2); System.out.println(file4); } } /* d:\javafiletest\a.txt d:\javafiletest\a.txt d:\javafiletest\a.txt */
常用成员方法 判断 isDirectory 格式 :
public boolean isDirectory()
说明 :判断此路径名表示的File是否为文件夹
isFile 格式 :
public boolean isFile()
说明 :判断此路径名表示的File是否为文件
exits 格式 :
public boolean exits()
说明 :判断此路径名表示的File是否存在
范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import java.io.File; public class Test{ public static void main(String[] args){ File file=new File("d:\\javafiletest\\a.txt"); System.out.println("isDirectory:"+file.isDirectory());//false System.out.println("isFile:"+file.isFile());//true System.out.println("exists:"+file.exists());//true System.out.println(); File file1=new File("d:\\javafiletest\\b"); System.out.println("isDirectory:"+file1.isDirectory());//true System.out.println("isFile:"+file1.isFile());//false System.out.println("exists:"+file1.exists());//true System.out.println(); File file2=new File("d:\\javafiletest\\c"); System.out.println("isDirectory:"+file2.isDirectory());//false System.out.println("isFile:"+file2.isFile());//false System.out.println("exists:"+file2.exists());//false } } /* isDirectory:false isFile:true exists:true isDirectory:true isFile:false exists:true isDirectory:false isFile:false exists:false */
获取 length 格式 :
public long length()
说明 :返回文件的大小(单位字节),无法获得文件夹的大小,若使用该方法返回文件夹大小,会返回错误值
getAbsolutePath 格式 :
public String getAbsolutePath()
说明 :返回文件的绝对路径
getPath 格式 :
public String getPath()
说明 :返回定义文件时使用的路径
getName 格式 :
public String getName()
说明 :返回文件的名称,带后缀,若返回文件夹,则不带后缀,就是文件夹的名字
lastModified 格式 :
public long lastModified()
说明 :返回文件的最后修改时间
范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; public class Test{ public static void main(String[] args){ File file=new File("D:\\javafiletest\\a.txt"); File directory=new File("D:\\javafiletest\\b"); System.out.println("length方法"); System.out.println(file.length()+"字节"); System.out.println(directory.length()+"字节"); System.out.println(); System.out.println("getAbsolutePath方法"); File file1=new File("practice\\b.txt"); System.out.println(file.getAbsoluteFile()); System.out.println(file1.getAbsoluteFile()); System.out.println(); System.out.println("getPath方法"); System.out.println(file.getPath()); System.out.println(file1.getPath()); System.out.println(); System.out.println("getName方法"); System.out.println(file.getName()); System.out.println(directory.getName()); System.out.println(); System.out.println("lastModified方法"); int l=(int)file.lastModified(); System.out.println(l); } } /* length方法 7字节 0字节 getAbsolutePath方法 D:\javafiletest\a.txt D:\Javacode\practice\practice\b.txt getPath方法 D:\javafiletest\a.txt practice\b.txt getName方法 a.txt b lastModified方法 389686339 */
创建 createNewFile 格式 :
public boolean createNewFile()
说明 :创建一个新的空的文件
细节 :
若当前路径表示的文件是不存在的,则创建成功,方法返回true
若当前路径表示的文件是存在的,则创建失败,方法返回false
若父级路径是不存在的,那么方法会有异常IOException
createNewfFile方法创建的一定是文件,若路径中不包含后缀名,则创建一个没有后缀的文件
mkdir 格式 :
public boolean mkdir()
说明 :创建单级文件夹
细节 :
Windows当中路径是唯一的,若当前路径已存在,则创建失败,返回false
mkdir方法只能创建单级文件夹,无法创建多级文件夹
mkdirs 格式 :
public boolean mkdirs()
说明 :创建多级文件夹
范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //d:\javafiletest文件夹初始为空 import java.io.File; import java.io.IOException; public class Test{ public static void main(String[] args) throws IOException { System.out.println("createNewFile方法"); File file1=new File("D:\\javafiletest\\a.txt"); boolean flag1=file1.createNewFile(); System.out.println(flag1); File file2=new File("D:\\javafiletest\\a.txt"); boolean flag2=file2.createNewFile(); System.out.println(flag2); File file3=new File("D:\\javafiletest\\a"); boolean flag3=file3.createNewFile(); System.out.println(flag3); File file4=new File("D:\\aaa\\a.txt"); boolean flag4=file4.createNewFile(); System.out.println(flag4); } } /* createNewFile方法 true false true Exception in thread "main" java.io.IOException: 系统找不到指定的路径。 at java.io.WinNTFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1012) at Test.main(Test.java:20) */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ////d:\javafiletest文件夹初始为空 import java.io.File; import java.io.IOException; public class Test{ public static void main(String[] args) throws IOException { System.out.println("mkdir方法"); File file5=new File("D:\\javafiletest\\a"); System.out.println(file5.mkdir()); File file6=new File("D:\\javafiletest\\b\\a"); System.out.println(file6.mkdir()); System.out.println(); System.out.println("mkdirs方法"); File file7=new File("D:\\javafiletest\\b\\a"); System.out.println(file7.mkdirs()); } } /* mkdir方法 true false mkdirs方法 true */
删除 delete 格式 :
public boolean delete()
说明 :删除文件、空文件夹
细节 :
若删除的是文件,则直接删除,不走回收站
若删除的是空文件夹,则直接删除,不走回收站
若删除的是有内容的文件夹,则删除失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* d:\\javafiletest文件下有三条路径 D:\javafiletest\a D:\javafiletest\b\b.txt D:\javafiletest\c.txt */ import java.io.File; public class Test{ public static void main(String[] args){ System.out.println("delete方法"); File file1=new File("D:\\javafiletest\\a"); System.out.println(file1.delete()); File file2=new File("D:\\javafiletest\\c.txt"); System.out.println(file2.delete()); File file3=new File("D:\\javafiletest\\b"); System.out.println(file3.delete()); } } /* delete方法 true true false */
获取并遍历 listFiles 格式 :
public File[] listFiles()
说明 :获取当前该路径下所有内容
细节 :
当调用者File表示的路径不存在时,返回null
当调用者File表示的路径是文件时,返回null
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.io.File; public class Test{ public static void main(String[] args){ System.out.println("listFiles方法"); File file=new File("D:\\javafiletest"); File[] files=file.listFiles(); for (File file1:files){ System.out.println(file1); } } } /* listFiles方法 D:\javafiletest\a D:\javafiletest\b D:\javafiletest\c.txt D:\javafiletest\d.txt */
范例 例1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /* true *///需求:在当前模块下的aaa文件夹中创建一个a.txt文件 import java.io.File; import java.io.IOException; public class Test{ public static void main(String[] args) throws IOException { File file=new File("aaa"); System.out.println(file.mkdirs()); File file1=new File(file,"a.txt"); boolean flag=file1.createNewFile(); if(flag){ System.out.println("创建成功"); }else { System.out.println("创建失败"); } } } /* 创建成功 */
例2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //需求:定义一个方法寻找d:\\javafiletest文件夹中,是否存在以.txt为结尾的文件(不考虑子文件夹) import java.io.File; public class Test{ public static void main(String[] args){ File file = new File("d:\\javafiletest"); if(findtxt(file)){ System.out.println("存在"); }else { System.out.println("不存在"); } } public static boolean findtxt(File file){ File[] files=file.listFiles(); for (File f:files){ if(f.isFile()&&f.getName().endsWith(".txt")){ return true; } } return false; } }
例3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //需求:找到d:\\javafiletest文件夹中所有以.txt结尾的文件 import java.io.File; public class Test{ public static void main(String[] args){ File file = new File("d:\\javafiletest"); findtxt(file); } public static void findtxt(File file){ File[] files=file.listFiles(); for (File f:files){ if(f.isDirectory()){ findtxt(f); }else{ if(f.getName().endsWith(".txt")){ System.out.println(f); } } } } }
例4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //需求:删除一个多级文件夹 import java.io.File; public class Test{ public static void main(String[] args){ File file = new File("d:\\javafiletest\\test"); delete(file); } public static void delete(File file){ File[] files=file.listFiles(); for (File f:files){ if(f.isFile()){ f.delete(); }else { delete(f); } } file.delete(); } }
例5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //计算文件总大小 import java.io.File; public class Test{ public static void main(String[] args){ File file = new File("d:\\javafiletest"); System.out.println(statistic(file)); } public static long statistic(File file){ File[] files=file.listFiles(); long sum=0; for(File f:files){ if(f.isFile()){ sum+=f.length(); }else { sum+=statistic(f); } } return sum; } } //36987
例6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 /* 需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹) 打印格式: txt:3个 md:4个 doc:5个 */ import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Test{ public static void main(String[] args){ File file = new File("d:\\javafiletest"); HashMap<String,Integer> hm=getCount(file); Set<Map.Entry<String,Integer>> entries=hm.entrySet(); for (Map.Entry<String,Integer> entry:entries){ System.out.println(entry.getKey()+":"+entry.getValue()); } } public static HashMap<String,Integer> getCount(File file){ HashMap<String,Integer> hm=new HashMap<>(); File[] files=file.listFiles(); for (File f:files) { //文件 if(f.isFile()){ String[] splits=f.getName().split("\\."); int length=splits.length; if(length!=1){ String s=splits[splits.length-1]; if(hm.containsKey(s)){ int count=hm.get(s); count++; hm.put(s,count); }else { hm.put(s,1); } } } //文件夹 else { HashMap<String,Integer> hmSon=getCount(f); Set<Map.Entry<String,Integer>> entries=hmSon.entrySet(); for (Map.Entry<String,Integer> entry:entries){ String key=entry.getKey(); int value=entry.getValue(); if(hm.containsKey(key)){ int i=hm.get(key); i=i+value hm.put(key,i); }else{ hm.put(key,value); } } } } return hm; } } /* txt:7 xlsx:3 md:2 doc:2 */