File类(封装了操作文件和文件夹的方法)
1.表示一个文件
2.表示一个文件夹
3.表示一个文件的路径
File中的静态变量:
路径分割符
根据操作系统的不同,分割符就不同
Mac : /
window ; \
public static void fun1() { String pathseparator = File.pathSeparator;//冒号 : System.out.println(pathseparator); String separator = File.separator;// 斜杠 / System.out.println(separator); }
绝对路径 : 该文件在当前硬盘上的路径 该路径是唯一的.
/Users/lanou/Desktop/afd 以斜杠开头
相对路径 :必须要有参照物, 不依斜杠开头
相对于参照物是你的工程
扫描二维码关注公众号,回复:
1118138 查看本文章
二 简单的方法
1.构造方法和判断文件是否存在.
public static void fun2() { //构造方法 File file1 = new File("src/wl.txt"); //判断该文件是否存在 boolean a = file1.exists(); System.out.println(a); //打印一下相对路径 System.out.println(file1.getAbsolutePath()); //利用父子路径创建File对象 File file2 = new File("/Users/lanou/Desktop", "afd"); boolean b = file2.exists(); System.out.println(b); File parent = new File("/Users/lanou/Desktop"); String child = "afd"; //利用一个文件和 一个路径 创建File对象 File file3 = new File(parent, child); boolean c = file3.exists(); //此方法既能创建多级也能创建一级文件夹 System.out.println(c); }
2.创建文件和文件夹方法 获取文件名
public static void fun3() throws IOException { //创建方法 File file1 = new File("/Users/lanou/Desktop/afd/wan"); //创建文件 boolean b1 = file1.createNewFile(); //该方法不会重复创建文件,只创建一次.只能创建文件(没有后缀也是文件) System.out.println(b1); //获取文件名方法 System.out.println(file1.getName()); //tostring 打印的是绝对路径 System.out.println(file1); //创建文件夹 File file3 = new File("/Users/lanou/Desktop/afd/c"); // boolean b2 = file3.mkdir(); //该方法不能创建多级文件夹. // System.out.println(b2); boolean b3 = file3.mkdirs(); System.out.println(b3); }
3.判断方法
public static void fun4() { //判断 //判断是否存在 //判断是否是文件 //判断是否是隐藏文件 File file1 = new File("/Users/lanou/Desktop/afd/wan"); boolean b1 = file1.isFile(); boolean b2 = file1.isDirectory(); boolean b3 = file1.isHidden(); System.out.println(b1); System.out.println(b2); System.out.println(b3); }
4.删除方法
public static void fun5() { //删除方法(删除要慎重,不会经过回收站) File file1 = new File("/Users/lanou/Desktop/afd/c"); boolean bb = file1.delete(); //该方法删除文件夹时,只能删除空文件夹 System.out.println(bb); }
5.获取文件
public static void fun6() { File file1 = new File("/Users/lanou/Desktop/afd"); //获取文件夹下的所有文件 以字符串形式 //获取的文件名是一级文件名 String [] arr = file1.list(); for (String string : arr) { System.out.println(string); } //获取文件夹下的所有文件 以文件形式 File [] art = file1.listFiles(); for (File file : art) { System.out.println(file); } }
6.遍历
需求:遍历打印Test文件夹下所有文件 封装一个方法(递归) public static void printFile(File file) { File[] listFiles = file.listFiles(); for (File file2 : listFiles) { if (file2.isDirectory()) { printFile(file2); }else { //文件 System.out.println(file2); } } }
public static void main(String[] args) throws IOException { File file1 = new File("/Users/lanou/Desktop/afd"); printFile(file1); }
7.获取文件长度
public static void fun1() { //获取文件的长度(获取文件的字节数) File file = new File("/Users/lanou/Desktop/afd/dahai.txt"); //MAC下 一个英文字符一个字节 中文字符3个字节. long num = file.length(); System.out.println(num); }
8.
从控制台输入一个字符串 该字符串是文件夹路径 计算这个文件夹的大小
1.封装一个方法
判断是不是文件夹 如果是,就返回这个文件
public static File isDir() { System.out.println("请输入你的地址"); Scanner scanner = new Scanner(System.in); while (true) { String string = scanner.nextLine(); File file = new File(string); if (!file.exists()) { isDir(); } if (file.isFile()) { System.out.println("你输入的是个文件,请重新输入"); }else { System.out.println("走你"); return file; } } }
2.封装一个方法
获取长度(此文件夹下所有文件的长度之和)
public static long getDirLength(File file) { long sum = 0; File[] files = file.listFiles(); for (File file2 : files) { if (file2.isDirectory()) {//如果是文件目录再次调用此方法 sum = sum + getDirLength(file2); }else { sum =sum +file2.length();//是文件就获取长度累加 } } return sum; }
9.删除一个文件夹
public static void deleteDir(File file) { File [] arr = file.listFiles(); for (File file2 : arr) { if (file2.isFile()) {//是文件先删除 file2.delete(); } else { //继续遍历 deleteDir(file2); } } //剩余一个空的文件夹 删除本文件夹 file.delete(); }
10. 输入一个文件夹路径 按层级关系以下面的格式 打印
a b 哈哈.txt c 嘿嘿.txt dahai.txt
public static void main(String[] args) { System.out.println("输入要打印的文件夹"); Scanner scanner = new Scanner(System.in); String path = scanner.nextLine(); File file = new File(path); printDir(file, 0); }
public static void printDir(File file, int level) { //循环出要打印的空格 String string = ""; for (int i = 0; i < level; i++) { string+=" "; } File[] files = file.listFiles(); for (File subFile : files) { if (!subFile.isHidden()) { System.out.println(string+subFile.getName()); } if (subFile.isDirectory()) { printDir(subFile, level+1); } } } }11. 输入一个文件夹路径 用map记录类型出现的次数
public class Demo03 { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); File file = new File("/Users/lanou/Desktop/afd"); getNum(map, file); System.out.println(map); } public static void getNum(HashMap<String, Integer> map,File file) { // 遍历所有文件 File[] files = file.listFiles(); for (File subFile : files) { //判断是不是文件夹 if (subFile.isDirectory()) { //是,重新调用该方法 getNum(map, subFile); }else { //不是文件夹就是文件 String name = subFile.getName(); String[] strings = name.split("\\."); String strType = strings[1]; if (!map.containsKey(strType)) { map.put(strType, 1); }else { Integer integer = map.get(strType); integer++; map.put(strType, integer); } } } } }
{txt=4, css=1, pdf=1, DS_Store=3, png=1}
文件过滤器
文件过滤器(fileFilter) JDK1.2出来的
1.实现接口及方法
2.调用 listFiles(FileFilter filter) 方法
3.打印查看接口
JDK1.0 文件过滤器
listFiles(FilenameFilter filter)
1.获取文件夹里所有TXT文件
public static void fun1() { File file = new File("/Users/lanou/Desktop/afd"); File[] files = file.listFiles(new Filter()); for (File file2 : files) { System.out.println(file2); } }
public static void getTetFile(File file) { File[] files = file.listFiles(new getTxtFile()); for (File file2 : files) { if (file2.isDirectory()) { //继续 getTetFile(file2); }else { //打印 System.out.println(file2.getName()); } } }
//过滤TXT class getTxtFile implements FileFilter{ @Override public boolean accept(File pathname) { //把文件夹也过滤了 (错误的) if (pathname.isDirectory()) { //是文件夹直接保存进数组中 return true; } //判断后缀TXT boolean b = pathname.getName().endsWith("txt"); return b; } }2.
通过FilenameFilter过滤器获取指定目录中小于200K的小文件(200*1024)
public static void fun2() { File file = new File("/Users/lanou/Desktop/afd"); File[] listFiles = file.listFiles(new MyFilenameFilter()); for (File file2 : listFiles) { System.out.println(file2); } }
//打印所有小于200k的文件 public static void getFile(File file) { File[] listFiles = file.listFiles(new My200KFilenameFilter()); for (File file2 : listFiles) { if (file2.isDirectory()) { //继续 getFile(file2); }else { //打印 System.out.println(file2.getName()); } } } }
//过滤200k以上的文件 class My200KFilenameFilter implements FileFilter{ @Override public boolean accept(File pathname) { if (pathname.isDirectory()) { return true; } return pathname.length()<200*1024; } }
通过以上两个例子,我们可以发现文件过滤器的用法: 定义一个新的过滤器类实现fileFilter接口.重写accept方法.
返回true 的时候,会把所有文件装到数组中
返回false 不会装到数组中
该方法的参数 是文件夹中所有的文件路径;
作用:
过滤掉你不需要的文件;