File
1.文件基本常识
绝对路径:c\...\... 这种形式的
相对路径:...\...\... 这种形式的
2.创建文件方法
代码:
public static void main(String[] args) { //创建一个文件对象,全路径的方式 File file1= new File("C:\\Users\\31127\\Desktop\\StudyPic.png"); //字符串和字符串拼接的方式 String str1 =" C:\\Users\\31127\\Desktop"; String str2 = "StudyPic.png"; File file2 = new File(str1+"\\"+str2); //中间记得加 \\ ,因为路径规则是这样的 //目录文件 + 字符串 File file3 = new File(str1); File file4 = new File(file3,str2); System.out.println(file1); System.out.println(file2); System.out.println(file4); }
结果:
C:\Users\31127\Desktop\StudyPic.png
C:\Users\31127\Desktop\StudyPic.png
C:\Users\31127\Desktop\StudyPic.png
3.总结
4.方法以及实现
代码实现
//以下是文件的方法实现 //判断是否为文件夹 System.out.println(file2.isDirectory()); System.out.println(file5.isDirectory()); //判断是否为文件 System.out.println(file1.isFile()); //判断文件是否存在 System.out.println(file2.exists()); //得到文件的大小值,而且获得的是字节数。只能获得的文件的,无法获得文件夹的 long fileLong = file2.length(); // long类型的,要得到准确的几M要转double型的 System.out.println(fileLong); long file5long = file5.length(); //为什么这个能获取得到??? System.out.println(file5long); //得到创建时候用的路径 System.out.println(file2.getPath()); //得到绝对路径 System.out.println(file2.getAbsoluteFile()); //得到文件的名称,若是文件则带后缀,若是文件夹则不带 System.out.println(file2.getName()); System.out.println(file5.getName());
5.文件删除和创建
1.createNewFile 创建一个新的空的文件
细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true/ l如果当前路径表示的文件是存在的,则创建失败,方法返回false
细节2:如果父级路径是不存在的,那么方法会有异常IOException
细节3: createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
代码实现
//创建文件,带后缀 //细节:有后缀名直接创建带后缀名的文件,没有则是空文件 File file6 = new File("D:\\JavaStudyDir\\a.txt"); boolean flag1 = file6.createNewFile(); System.out.println(flag1); //创建文件,不带后缀 File file7 = new File("D:\\JavaStudyDir\\a"); boolean flag2 = file6.createNewFile(); System.out.println(flag2);
mkdir:
细节1: windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
细节2: mkdir方法只能创建单级文件夹,无法创建多级文件夹。
3.mkdirs创建多级文件夹
细节:既可以创建单级的,又可以创建多级的文件夹
//创建单级文件夹 File file8 = new File("D:\\JavaStudyDir\\aaa"); boolean flag3 = file8.mkdirs(); System.out.println(flag3); //创建多级文件夹,不是多个 File file9 = new File("D:\\JavaStudyDir\\bbb\\ccc\\ddd"); boolean flag4 = file9.mkdirs(); System.out.println(flag4);
删除细节:
1.如果删除的是文件,则直接删除,不走回收站。
2.如果删除的是空文件夹,则直接删除,不走回收站
3.如果删除的是有内容的文件夹,则删除失败,例如:多级文件不能删除,因为多级里面算是有文件(多级不是指多个)
//删除文件以及文件夹 System.out.println(file6.delete()); System.out.println(file7.delete()); System.out.println(file8.delete()); System.out.println(file9.delete());
6.遍历
代码实现
//遍历文件夹 File file10 = new File("D:\\JavaStudyDir"); for (File file : file10.listFiles()) { System.out.println(file); }
掌握蓝色字体的方法,其他看明白即可
7.练习
a
//需求:
//在当前模块下的aaa文件夹中创建一个a.txt文件
File file1 = new File("D:\\JavaStudyDir\\a.txt");
File file2 = new File("D:\\JavaStudyDir\\b.txt");
boolean flag1 = file1.createNewFile();
boolean flag2 = file2.createNewFile();
System.out.println(flag1);
System.out.println(flag2);
b.
//需求: //定义一个方法找某一个文件夹中,是否有以avi结尾的电影。(暂时不需要考虑子文件夹) File file3 = new File("D:\\JavaStudyDir"); File[] files = file3.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isFile()&&pathname.getName().endsWith(".avi"); } }); for (File file : files) { System.out.println(file); }
c.
//需求: //找到电脑中所有以avi结尾的电影。(需要考虑子文件夹) //第一步,得到所有盘文件 File[] fileLoots = File.listRoots(); for (File fileLoot : fileLoots) { getTxt(fileLoot); } //需求 //D:\JavaStudyDir\aaa\bbb\ccc\ddd\eee\fff\ggg //删除一个多级文件夹 System.out.println("hahahah"); File fileDeleMany = new File("D:\\JavaStudyDir"); delMany(fileDeleMany); 这是方法代码
public static void getTxt(File files){ //遍历当前文件夹 File[] filestwo = files.listFiles(); //如果不为空 因为如果路径错了和不存在,以及扫描到需要权限的文件夹返回的都是空。但是长度为0的数组还是可以遍历的。 if(filestwo != null){ for (File file : filestwo) { //如果后缀名为avi则打印 if(file.isFile()&&file.getName().endsWith(".avi")){ System.out.println(file); } //递归查找文件夹 else if (file.isDirectory()) { getTxt(file); } } } }
d.
//需求 //D:\JavaStudyDir\aaa\bbb\ccc\ddd\eee\fff\ggg //删除一个多级文件夹 System.out.println("hahahah"); File fileDeleMany = new File("D:\\JavaStudyDir"); delMany(fileDeleMany);
这是方法代码
public static void delMany(File file){ File[] files = file.listFiles(); for (File file1 : files) { if(file1.isFile() ){ System.out.println(file1.delete()); } else{ delMany(file1); } } System.out.println(file.delete()); }
e
//需求: //统计一个文件夹的总大小 File file = new File("D:\\JavaStudyDir"); System.out.println(getDir(file));
//这是方法
public static long getDir(File file){ File[] files = file.listFiles(); if (files == null){ System.out.println("出错的原因可能是:路径名出错,文件不存在,需要权限"); }else { for (File file1 : files) { if(file1.isFile()){ count = count+file1.length(); }else { getDir(file1); } } } return count; }
f
//需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)打印格式如下: //② txt:3个 //3 doc:4个 //④ jpg:6个 File file = new File("D:\\JavaStudyDir"); getNum(file);
public static void getNum(File file){ //创建Map集合去接受出现的文件名 Map<String,Integer> map = new TreeMap<>(); File[] files = file.listFiles(); if(files.length !=0 && files != null) { for (File file1 : files) { if (file1.isFile() ) { String[] strs = file1.getName().split("\\."); int length = strs.length; if (map.containsKey(strs[length - 1])) { int aimNum = map.get(strs[length - 1]) + 1; map.put(strs[length - 1], aimNum); } else { Integer start = 1; map.put(strs[length - 1], start); } }else{ getNum(file1); } } } Set<Map.Entry<String, Integer>> entries = map.entrySet(); entries.stream().forEach(new Consumer<Map.Entry<String, Integer>>() { @Override public void accept(Map.Entry<String, Integer> stringIntegerEntry) { System.out.println(stringIntegerEntry); } }); }