黑马程序员: File类、递归的学习

------- android培训java培训期待与您交流! ---------- 

/*
 * File:为了方便对硬盘上的文件和文件夹进行描述,方便使用,java提供了一个类File供我们使用。
 * 
 * File类的构造方法:
 * 		File(String pathname):根据指定路径名创建文件对象
 *		File(String parent, String child):根据指定的父目录和子路径创建文件对象
 *		File(File parent, String child):根据指定的父目录对象和子路径创建文件对象
 *
 *		这三种方式等价,一般我们使用第一种
 */
public class FileDemo {
	public static void main(String[] args) {
		// 方式1 把d盘目录下的a.txt封装成一个文件对象
		File file = new File("d:\\a.txt");

		// 方式2
		File file2 = new File("d:\\", "a.txt");

		// 方式3
		File file3 = new File("d:\\");
		File file4 = new File(file3, "a.txt");
	}
}
/*
 * File类的创建功能:
 * 		创建文件:boolean createNewFile():创建文件,如果文件存在,就不创建,返回false。否则,创建,返回true
 * 		创建文件夹:boolean mkdir():创建单级文件夹
 * 				  boolean mkdirs():创建多级文件夹
 * 
 * 如果没有指定明确目录,就会在当前项目路径下创建文件或者文件夹。
 * 
 * 绝对路径:是以盘符开始的路径
 * 相对路径:不以盘符开始的路径
 * 
 * 注意:创建什么,你自己最清楚,要调用对应的方法。
 * 
 * 骑白马的不一定王子,可能是唐僧:创建文件的时候,不要使用创建文件夹的方式,否则即使成功也是一个文件夹。
 */
public class FileDemo2 {

	public static void main(String[] args) throws IOException {
		// 创建文件对象
		File file = new File("d:\\a.txt");
		System.out.println("createNewFile:" + file.createNewFile());
		// 创建文件对象
		File file3 = new File("aaa");
		// System.out.println("createNewFile:" + file3.createNewFile());
		System.out.println("mkdir:" + file3.mkdir());

		// 需求:创建bbb\\b.txt
		File file4 = new File("bbb");
		System.out.println("mkdir:" + file4.mkdir());
		// File file5 = new File("bbb\\b.txt");
		File file5 = new File(file4, "b.txt");
		// java.io.IOException: 系统找不到指定的路径。
		System.out.println("createNewFile:" + file5.createNewFile());

		// 需求:创建ccc\\ddd\\eee
		File file6 = new File("ccc\\ddd\\eee");
		// System.out.println("mkdir:" + file6.mkdir());
		System.out.println("mkdirs:" + file6.mkdirs());
		
		//需求:创建fff\\ggg\\a.txt
		File file7 = new File("fff\\ggg\\a.txt");
		System.out.println("mkdirs:"+file7.mkdirs());
	}

}
/*
 * File类的删除功能:
 * 		public boolean delete():既可以删除文件,还可以删除文件夹
 * 
 * 注意:在删除的时候,如果指定的目录里面有内容(文件或者文件夹),那么,是不能直接删除的。
 * 		 需要把里面的内容先删除,在删除外面的内容。
 * 
 * 		Java的刪除,不走回收站。
 */
public class FileDemo3 {
	public static void main(String[] args) {
		// 创建文件对象
		File file = new File("a.txt");
		// 删除文件
		System.out.println("delete:" + file.delete());

		// 删除多级目录
		File file3 = new File("ccc");
		System.out.println("delete:" + file3.delete());
	}
}
/*
 * File类的判断功能:
 * boolean exists():是否存在
 * boolean isFile():是否是文件对象
 * boolean isDirectory():是否是文件夹对象
 * boolean isAbsolute():是否是绝对路径
 * boolean canRead():是否可读
 * boolean canWrite():是否可写
 * boolean isHidden():是否隐藏
 */
public class FileDemo4 {
	public static void main(String[] args) throws IOException {
		// 创建文件对象
		File file = new File("a.txt");
		// 调用创建方法,创建一个文件
		file.createNewFile();

		System.out.println("exists:" + file.exists());
		System.out.println("isFile:" + file.isFile());
		System.out.println("isDirectory:" + file.isDirectory());
		System.out.println("isAbsolute:" + file.isAbsolute());
		System.out.println("canRead:" + file.canRead());
		System.out.println("canWrite:" + file.canWrite());
		System.out.println("isHidden:" + file.isHidden());
	}
}
/*
 * File类的重命名功能:
 * 		public boolean renameTo(File dest)
 */
public class FileDemo5 {
	public static void main(String[] args) {
		// 创建文件对象
		File file = new File("a.txt");
		File file2 = new File("hello.java");
		System.out.println("renameTo:" + file.renameTo(file2));
	}
}
/*
 * File类的获取功能:
 * String getAbsolutePath():获取绝对路径
 * String getPath():获取相对路径
 * String getName():获取文件名称
 * long length():文件的长度
 * long lastModified():返回文件最后一次修改时间的毫秒值
 */
public class FileDemo6 {
	public static void main(String[] args) {
		// 创建文件对象
		File file = new File("bbb\\hello.java");

		System.out.println("getAbsolutePath:" + file.getAbsolutePath());
		System.out.println("getPath:" + file.getPath());
		System.out.println("getName:" + file.getName());
		System.out.println("length:" + file.length());
		System.out.println("lastModified:" + file.lastModified());
	}
}
/*
 * File类的重要获取功能:
 * 		public static File[] listRoots():列出系统的可用的根
 *		public String[] list():获取指定目录下的所有文件和文件夹的名称数组
 *		public File[] listFiles():获取指定目录下的所有文件和文件夹的File数组
 */
public class FileDemo7 {
	public static void main(String[] args) {
		// 列出系统的可用的根
		File[] fileRoots = File.listRoots();
		for (File root : fileRoots) {
			System.out.println(root);
		}
		System.out.println("********************");
		// 创建File对象
		File file = new File("d:\\");
		String[] strArray = file.list();
		for (String s : strArray) {
			System.out.println(s);
		}
		System.out.println("********************");
		// 需求:我现在想列出d盘根目录下所有文件的名称
		File[] fileArray = file.listFiles();
		for (File f : fileArray) {
			if (f.isFile()) {
				// 如果你是文件
				System.out.println(f.getName());
			}
		}

	}
}
/*
 * 带FilenameFilter过滤器的获取:
 * 		public String[] list(FilenameFilter filter)
 * 		public File[] listFiles(FilenameFilter filter)
 * 
 * FilenameFilter:文件名称过滤器
 */
public class FileDemo8 {
	public static void main(String[] args) {
		// 封装d盘目录
		File file = new File("d:\\");

		// 使用方法
		// MyFilenameFilter mff = new MyFilenameFilter();
		// String[] strArray = file.list(mff);
		// 匿名对象
		String[] strArray = file.list(new MyFilenameFilter());
		for (String str : strArray) {
			System.out.println(str);
		}

	}
}
------------------------------------------递归------------------------------------
/*
 * 递归:方法定义中调用方法本身的现象。
 * 注意:
 * 		递归的次数不能过多。
 * 		递归一定要有出口条件。
 * 
 * 举例:
 * 		从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事是:
 * 			从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事是:
 * 				从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事是:
 * 					...
 * 		学编程 -- 找工作 -- 挣钱 -- 娶媳妇 -- 生孩子 -- 上学 
 * 			学编程 -- 找工作 -- 挣钱 -- 娶媳妇 -- 生孩子 -- 上学 
 * 				学编程 -- 找工作 -- 挣钱 -- 娶媳妇 -- 生孩子 -- 上学 
 * 					学编程 -- 找工作 -- 挣钱 -- 娶媳妇 -- 生孩子 -- 上学 
 * 						... 孩子不爱学编程,自己当老板
 */
public class DiGuiDemo {

	// Exception in thread "main" java.lang.StackOverflowError
	public static void show(int n) {
		if (n == 0) {
			System.out.println("over");
			System.exit(0);
		} else {
			System.out.println("hello");
			show(n - 1);
		}
	}

	public static void main(String[] args) {
		show(3);
	}
}

/*
 * 求5的阶乘:5! = 5 * 4 * 3 * 2 * 1
 * 
 * 用递归解决一个问题的时候:
 * 		A:出口条件
 * 		B:递归的规律
 * 
 * 阶乘:
 * 		n的阶乘等于n乘以(n-1)的阶乘。
 * 		1的阶乘是1
 */
public class DiGuiDemo2 {
	public static void main(String[] args) {
		// 不用递归实现求5的阶乘

		// 定义累积变量
		int x = 1;
		for (int y = 2; y <= 5; y++) {
			x *= y;
		}
		System.out.println("5的阶乘:" + x);

		// 用递归求阶乘
		System.out.println("5的阶乘:" + jc(5));

	}
	// 我认为我这个方法就是用来求n的阶乘的:jc(n)
	// 那么,n-1的阶乘用什么表示?jc(n-1)
	public static int jc(int n) {
		if (n == 1) {
			return 1;
		} else {
			return n * jc(n - 1);
		}
	}
}
/*
 * 需求:
 * 斐波纳契数列:
 * 		1,1,2,8,3,5,...
 * 求这个数列的第20项的值。
 * 
 * 用递归实现:
 * 		A:出口 通过规律说明前两项是已知的,第一项和第二项的值都是1
 *		B:规律 从第三项开始,每一项是前两项之和。
 */
public class DiGuiTest {
	public static void main(String[] args) {
		System.out.println("斐波纳契数列的第二十项的值是:" + fib(20));
	}

	// 加入fib(n)表示这个数列的第n项的值。
	// 那么,它的前一项怎么表示:fib(n-1)
	// 同理,前第二项怎么表示:fib(n-2)
	public static int fib(int n) {
		if (n == 1 || n == 2) {
			return 1;
		} else {
			return fib(n - 1) + fib(n - 2);
		}
	}
}

删除要注意的问题:系统有隐藏系统文件,这种文件你操作不了,还有,系统有保护文件,你目前也操作不了。
 * 				   这种东西你在获取的时候,它返给你的就是null值。
 * 
 * 开发中的原则:是对象就判断是不是null,如果不是,就操作

------- android培训java培训期待与您交流! ---------- 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值