Java基础学习之File

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  以斜杠开头

 相对路径 :必须要有参照物, 不依斜杠开头

 相对于参照物是你的工程


二 简单的方法

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 不会装到数组中

 该方法的参数 是文件夹中所有的文件路径;

   作用:

  过滤掉你不需要的文件;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值