------- 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培训、期待与您交流! ----------