学习笔记之JavaSE(43)--IO流5

今天学习的内容是File类


File类代表的是文件或者目录的路径名称,而不是文件的内容。通常使用File对象代替字符串文件名作为构造函数的参数传给FileWriter、FileReader、Fileoutputstream或FileInputStream是一种更加安全的做法。关于File类的构造方法,常用方法的使用及注意事项见程序示例:

public class Test83 {

	@SuppressWarnings("unused")
	public static void main(String[] args) {

		// 创建File对象
		File f1 = new File("test.txt");
		File f2 = new File("f:\\", "test.txt");
		File f3 = new File(new File("f:\\"), "text.txt");
		File f4 = new File("f:" + File.separator + "test.txt");

		// File类常用方法1:获取
		System.out.println(f1.getName());// test.txt 获取文件名称
		System.out.println(f1.getAbsolutePath());// E:\IDE\workspace\Test83\test.txt
													// 获取文件绝对路径
		System.out.println(f1.getPath());// test.txt 获取文件抽象路径名(构造函数写的啥这里就是啥)
		System.out.println(f1.length());// 0 获取文件大小(字节为单位)
		System.out.println(f1.lastModified());// 1480419406572 获取文件最后修改时间

		// File类常用方法2:创建与删除
		File file = new File("new.txt");
		try {
			file.createNewFile();// 若文件不存在则创建文件,若文件存在则不创建(不会覆盖原文件)
		} catch (IOException e) {
			e.printStackTrace();
		}
		// file.delete(); 删除文件
		File dir = new File("k");
		dir.mkdir();// 创建新目录(单级目录)
		// dir.mkdirs(); 创建新目录(多级目录)
		// dir.delete(); 删除目录,注意如果目录中含有内容,无法使用此方法删除

		// File类常用方法3:判断
		System.out.println(f1.exists());// true 判断文件或目录是否存在
		System.out.println(file.exists());// true 判断文件是否存在
		System.out.println(f1.isFile());// true 判断是否为文件(最好先判断是否存在)
		System.out.println(file.isFile());// true 判断是否为文件
		System.out.println(dir.isDirectory());// true 判断是否为目录(最好先判断是否存在)

		// File类常用方法4:重命名
		File rename = new File("rename.txt");
		file.renameTo(rename);

		// File类常用方法5:系统根目录
		File[] files = File.listRoots();
		for (File f : files) {
			System.out.print(f);// C:\D:\E:\G:\ 系统根目录
		}

		// File类常用方法6:获取目录内容
		File dir_list = new File("c:\\");
		if (dir_list.isDirectory()) {
			String[] dirContents = dir_list.list();// 获取当前目录下的文件及文件夹的名称,包含隐藏文件
			for (int i = 0; i < dirContents.length; i++) {
				System.out.println(dirContents[i]);
			}
		}

		// File类常用方法7:过滤器(比如只想获取c盘的.txt文件)
		File dir_list_filter = new File("c:\\");
		String[] dirContents_filter = dir_list_filter.list(new FilterByTxt());
		for (int i = 0; i < dirContents_filter.length; i++) {
			System.out.println("使用过滤器获取目录内容:" + dirContents_filter[i]);// 使用过滤器获取目录内容:ImbaMallLog.txt

		}
	}
}

// 过滤器
class FilterByTxt implements FilenameFilter {

	@Override
	public boolean accept(File dir, String name) {

		return name.endsWith(".txt");
	}
}

关于File类的练习如下(其中使用到递归):

public class Test84 {

	public static void main(String[] args) {

		File dir = new File("e:\\IDE\\workspace\\Test84");
		test_1(dir, 0);
		
		int num = 6;
		System.out.print(num+"的二进制结果为:");
		test_2(num);
		
		File dir_delete = new File("test");
		test_3(dir_delete);
	}

	//删除一个带内容的目录
	private static void test_3(File dir) {

		File[] files = dir.listFiles();
		for (int i = 0; i < files.length; i++) {
			if(files[i].isDirectory()){
				test_3(files[i]);
			}else{
				System.out.println(files[i]+":"+files[i].delete());
			}
		}
		System.out.println(dir+":"+dir.delete());
	}

	//使用递归获取任意数字的二进制结果
	private static void test_2(int num) {

		if(num>0){//注意递归一定要明确结束递归的条件,否则会发生栈异常
			System.out.print(num%2);
			test_2(num/2);
		}
	}

	// 列出当前目录的所有内容,包括子目录的内容
	private static void test_1(File dir, int level) {

		level++;
		File[] files = dir.listFiles();// 获取指定目录下的所有目录及文件对象
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				System.out.println(getSpace(level-1) + ":" + files[i]);
				test_1(files[i], level);// 递归
			} else {
				System.out.println(getSpace(level-1) + ":" + files[i].getAbsolutePath());
			}
		}
	}

	private static String getSpace(int level) {

		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < level; i++) {
			sb.append("   ");
		}
		return sb.toString();
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值