介绍:
File对象表示路径,可以是文件,也可以是文件夹。这个路径可以是存在的,也可以是不存在的,带盘符的路径是绝对路径,不带盘符的路径是相对路径,相对路径默认到当前项目下去找
构造方法:
public File(String pathname) 把字符串表示的路径变成File对象 public File(String parent, String child) 把父级路径和子级路径进行拼接 public File(File parent, String child) 把父级路径和子级路径进行拼接
代码演示:
public class FileDemo1 {public static void main(String[] args) {/*public File(String pathname) 把字符串表示的路径变成File对象public File(String parent, String child) 把父级路径和子级路径进行拼接public File(File parent, String child) 把父级路径和子级路径进行拼接*///路径 C:\Users\han\Desktop//1.public File(String pathname) 把字符串表示的路径变成File对象String str = "C:\\Users\\han\\Desktop";File f1 = new File(str);System.out.println(f1);//2.public File(String parent, String child) 把父级路径和子级路径进行拼接String parent = "C:\\Users\\han";String child = "Desktop";File f2 = new File(parent,child);System.out.println(f2);//3.public File(File parent, String child) 把父级路径和子级路径进行拼接File parent2 = new File("C:\\Users\\han");String child2 = "Desktop";File f3 = new File(parent2,child2);System.out.println(f3);}
}
运行结果:
成员方法:
1.判断和获取
下面来进行演示:
这里我先在D盘的JavaFileTest文件夹中创建了文件夹aaa和文件a.txt
文件夹aaa中有一个文件b.txt,存储80个1,大小为80字节
文件a.txt中只有三个字符123,大小为3字节
代码演示:
public class FileDemo2 {public static void main(String[] args) {/*public boolean isDirectory() 判断此路径名表示的File是否为文件夹public boolean isFile() 判断此路径名表示的File是否为文件public boolean exists() 判断此路径名表示的File是否存在public long length() 返回文件的大小(字节数量)public String getAbsolutePath() 返回文件的绝对路径public String getPath() 返回定义文件时使用的路径public String getName() 返回文件的名称,带后缀public long lastModified() 返回文件的最后修改时间(时间毫秒值)*///判断//public boolean isDirectory() 判断此路径名表示的File是否为文件夹//public boolean isFile() 判断此路径名表示的File是否为文件//public boolean exists() 判断此路径名表示的File是否存在//1.对文件进行判断File f1 = new File("D:\\JavaFileTest\\a.txt");System.out.println(f1.isDirectory());System.out.println(f1.isFile());System.out.println(f1.exists());//2.对文件夹进行判断System.out.println("------------------------");File f2 = new File("D:\\JavaFileTest\\aaa");System.out.println(f2.isDirectory());System.out.println(f2.isFile());System.out.println(f2.exists());//3.对不存在路径进行判断System.out.println("------------------------");File f3 = new File("D:\\JavaFileTest\\abc");System.out.println(f3.isDirectory());System.out.println(f3.isFile());System.out.println(f3.exists());//获取System.out.println("------------------------");//public long length() 返回文件的大小(字节数量)System.out.println("------------------------");System.out.println(f1.length());//注意:这个方法只能获取文件的大小,单位是字节//如果单位是M、G,可以不断除1024System.out.println(f2.length());//无法获取文件夹的大小//如果要获取文件夹的大小,需要把文件夹中的所有文件大小累加在一起//public String getAbsolutePath() 返回文件的绝对路径System.out.println("------------------------");System.out.println(f1.getAbsoluteFile());System.out.println(f2.getAbsoluteFile());//这里在idea中此模块新建了一个文件a.txtFile f4 = new File("file\\a.txt");System.out.println(f4.getAbsoluteFile());//public String getPath() 返回定义文件时使用的路径System.out.println("------------------------");System.out.println(f1.getPath());System.out.println(f2.getPath());System.out.println(f4.getPath());//public String getName() 返回文件的名称,带后缀System.out.println("------------------------");System.out.println(f1.getName());System.out.println(f2.getName());System.out.println(f4.getName());//public long lastModified() 返回文件的最后修改时间(时间毫秒值)System.out.println("------------------------");long lastModified1 = f1.lastModified();System.out.println(lastModified1);SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");System.out.println(sdf.format(lastModified1));}
}
运行结果:
2.创建和删除
这里仍然是在D盘中JavaFileTest文件中创建一个文件a.txt和一个文件夹aaa内容包括一个文件b.txt。
代码演示:
public class FileDemo3 {public static void main(String[] args) throws IOException {/*public boolean createNewFile() 创建一个新的空的文件public boolean mkdir() 创建单极文件夹public boolean mkdirs() 创建多级文件夹public boolean delete() 删除文件、空文件夹*///1.public boolean createNewFile() 创建一个新的空的文件//创建一个不存在的文件System.out.println("创建一个不存在的文件");File f1 = new File("D:\\JavaFileTest\\b.txt");boolean b1 = f1.createNewFile();System.out.println(b1);//创建一个已经存在的文件System.out.println("创建一个已经存在的文件");File f2 = new File("D:\\JavaFileTest\\a.txt");boolean b2 = f2.createNewFile();System.out.println(b2);//细节1:如果创建一个父级路径不存在的文件,那么会有异常IOException/*细节2:createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件*/System.out.println();//2.public boolean mkdir() 创建单极文件夹//创建已经存在的路径(包括已经创建的文件的路径)的文件夹System.out.println("创建已经存在的路径(包括已经创建的文件的路径)的文件夹");File f3 = new File("D:\\JavaFileTest\\aaa");boolean b3 = f3.mkdir();System.out.println(b3);//创建一个不存在的路径的文件夹System.out.println("创建一个不存在的路径的文件夹");File f4 = new File("D:\\JavaFileTest\\bbb");boolean b4 = f4.mkdir();System.out.println(b4);//创建一个多级文件夹System.out.println("创建一个多级文件夹");File f5 = new File("D:\\JavaFileTest\\aaa\\bbb\\ccc");boolean b5 = f5.mkdir();System.out.println(b5);System.out.println();//3.public boolean mkdirs() 创建多级文件夹System.out.println("创建多级文件夹");//细节:mkdirs方法既可以创建单极文件夹,又可以创建多级文件夹File f6 = new File("D:\\JavaFileTest\\aaa\\bbb\\ccc");boolean b6 = f6.mkdirs();System.out.println(b6);System.out.println();//4.public boolean delete() 删除文件、空文件夹//删除已存在文件System.out.println("删除已存在文件");boolean b7 = f1.delete();System.out.println(b7);//删除不存在的文件System.out.println("删除不存在的文件");File f8 = new File("D:\\JavaFileTest\\abcdefg");boolean b8 = f8.delete();System.out.println(b8);//删除有内容的文件夹System.out.println("删除有内容的文件夹");boolean b9 = f3.delete();System.out.println(b9);//删除空文件夹System.out.println("删除空文件夹");boolean b10 = f4.delete();System.out.println(b10);}
}
运行结果:
3.获取并遍历
这里仍然是在D盘中JavaFileTest文件中创建一个文件a.txt和一个文件夹aaa内容包括一个文件b.txt。
代码演示:
public class FileDemo4 {public static void main(String[] args) {File f1 = new File("D:\\JavaFileTest");File[] files = f1.listFiles();for (File file : files) {System.out.println(file);}}
}
运行结果:
注意:
1.当调用者File表示的路径不存在时,返回null
2.当调用者File表示的路径是文件时,返回null
3.当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
4.当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在FIle数组中返回
5.当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在FIle数组中返回,包含隐藏文件
6.当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
获取并遍历还有其他一些方法,如下:
这些方法只需了解即可,重点掌握上述listFiles方法。
练习题:
先创建好文件和文件夹
JavaFileTest文件夹:
aaa文件夹:(只存储空文件夹ccc)
bbb文件夹:
练习一
在当前模块下的aaa文件夹中创建一个a.txt
代码演示:
public class FileTest1 {public static void main(String[] args) throws IOException {File parent = new File("C:\\Users\\Han\\IdeaProjects\\file\\aaa");String name = "a.txt";File file = new File(parent,name);boolean b = file.createNewFile();System.out.println(b);}
}
运行结果:
练习二
定义一个方法找某一个文件夹中,是否有以.xls结尾的工作表(暂时不需要考虑子文件夹)
代码演示:
public class FileTest2 {public static void main(String[] args) {//对文件夹aaa判断File f1 = new File("D:\\JavaFileTest\\aaa");boolean b1 = existXls(f1);System.out.println(b1);//对文件夹bbb判断File f2 = new File("D:\\JavaFileTest\\bbb");boolean b2 = existXls(f2);System.out.println(b2);}//定义方法public static boolean existXls(File file) {//遍历File[] files = file.listFiles();if(files == null) {return false;}for (File f : files) {if(f.isFile() && f.getName().endsWith(".xls")) {return true;}}return false;}
}
运行结果:
练习三
找到电脑中所有以.xls结尾的工作表(需要考虑子文件夹)
代码演示:
public class FileTest3 {public static void main(String[] args) {File[] roots = File.listRoots();for (File root : roots) {// C:\ D:\ergodicFile(root);}}//遍历一个文件夹,并输出所有.xls文件public static void ergodicFile(File dir) {File[] files = dir.listFiles();if (files != null) {for (File file : files) {if(file.isDirectory()){//如果是文件夹ergodicFile(file);} else {//如果是文件String name = file.getName();if(name.endsWith(".xls")) {System.out.println(name);}}}}}}
运行结果:
练习四
删除一个多级文件夹
代码演示:
public class FileTest4 {public static void main(String[] args) {File f1 = new File("D:\\JavaFileTest\\aaa");deleteFile(f1);}//遍历一个文件夹,并删除所有文件public static void deleteFile(File dir) {File[] files = dir.listFiles();if (files != null) {for (File file : files) {if(file.isDirectory()){//如果是文件夹deleteFile(file);} else {//如果是文件file.delete();}}}dir.delete();}
}
运行结果:
成功删除aaa多级文件夹
练习五
统计一个文件夹中每种文件的个数并打印(考虑子文件夹)打印格式如下:txt:2个doc:3个xls:1个
代码演示:
public class FileTest5 {static HashMap<String,Integer> hm = new HashMap<>();public static void main(String[] args) {File file = new File("D:\\JavaFileTest");getAllKindsOfFile(file);hm.forEach((key, count) -> System.out.println(key + ":" + count + "个"));}public static void getAllKindsOfFile(File src) {File[] files = src.listFiles();for (File file : files) {//遍历if(file.isFile()) {//是文件String name = file.getName();if(name.contains(".")) {String[] arr = name.split("\\.");//单一个.表示任意字符,加上转义字符才表示.String kind = arr[arr.length - 1];if(hm.containsKey(kind)) {//如果集合中已存在hm.put(kind,hm.get(kind) + 1);} else {//如果集合中未存在hm.put(kind,1);}}} else {//是文件夹getAllKindsOfFile(file);}}}
}