文章目录
1. File类
1.1 创建File类对象
绝对路径和相对路径
- 绝对路径:从盘符开始
File file = new File("D:\\aaa\\data.txt");
- 相对路径:不带盘符,默认到当前工程下的目录寻找文件。
File file = new File("模块名\\data.txt");
File类创建小结
1.2 File类创建常用方法
1.2.1 判断文件类型,获取文件信息
代码演示:
public class FileDemo02 {
public static void main(String[] args) {
// 1.绝对路径创建一个文件对象
File f1 = new File("D:/resources/xueshan.jpeg");
// a.获取它的绝对路径。
System.out.println(f1.getAbsolutePath());
// b.获取文件定义的时候使用的路径。
System.out.println(f1.getPath());
// c.获取文件的名称:带后缀。
System.out.println(f1.getName());
// d.获取文件的大小:字节个数。
System.out.println(f1.length()); // 字节大小
// e.获取文件的最后修改时间
long time = f1.lastModified();
System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
// f、判断文件是文件还是文件夹
System.out.println(f1.isFile()); // true
System.out.println(f1.isDirectory()); // false
}
}
1.2.2 创建,删除文件
1.2.3 遍历文件夹
代码演示:
public class FileDemo04 {
public static void main(String[] args) {
// 1、定位一个目录
File f1 = new File("D:/java");
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
System.out.println("========");
// 2.一级文件对象
// 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
// 注意事项
File dir = new File("D:/java/ddd");
File[] files1 = dir.listFiles();
System.out.println(Arrays.toString(files1));
}
}
小结:
2. 方法递归
2.1 方法递归形式
2.2 递归算法三要素
首先,我们来分析一下下面的案例
归纳一下就是方法调用自己本身,然后需要有一个出口,否则会造成死循环、内存溢出。
2.3 规律递归:猴子吃桃
/**
目标 猴子吃桃。
公式(合理的): f(x) - f(x)/2 - 1 = f(x+1)
2f(x) - f(x) - 2 = 2f(x + 1)
f(x) = 2f(x + 1) + 2
求f(1) = ?
终结点: f(10) = 1
递归的方向:合理的
*/
public class RecursionDemo04 {
public static void main(String[] args) {
System.out.println(f(1));
System.out.println(f(2));
System.out.println(f(3));
}
public static int f(int n){
if(n == 10){
return 1;
}else {
return 2 * f(n + 1) + 2;
}
}
}
2.4 非规律递归:文件搜索
public class RecursionDemo05 {
public static void main(String[] args) {
// 2、传入目录 和 文件名称
searchFile(new File("D:/") , "day10、IO二.pptx");
}
/**
* 1、搜索某个目录下的全部文件,找到我们想要的文件。
* @param dir 被搜索的源目录
* @param fileName 被搜索的文件名称
*/
public static void searchFile(File dir,String fileName){
// 3、判断dir是否是目录
if(dir != null && dir.isDirectory()){
// 可以找了
// 4、提取当前目录下的一级文件对象
File[] files = dir.listFiles(); // null []
// 5、判断是否存在一级文件对象,存在才可以遍历
if(files != null && files.length > 0) {
for (File file : files) {
// 6、判断当前遍历的一级文件对象是文件 还是 目录
if(file.isFile()){
// 7、是不是咱们要找的,是把其路径输出即可
if(file.getName().contains(fileName)){
System.out.println("找到了:" + file.getAbsolutePath());
}
}else {
// 8、是文件夹,需要继续递归寻找
searchFile(file, fileName);
}
}
}
}else {
System.out.println("对不起,当前搜索的位置不是文件夹!");
}
}
}
3. 字符集
3.1 常见字符集介绍
- ASCII:只包含英文字母加英文符号,一个英文符号用一个字节存储
- GBK:包含英文字母和中文汉字,一个汉字用两个字节存储
- Unicode(UTF-8):万国码,该编码方式一个汉字由三个字节存储
- 注:因汉字在不同的编码格式下的存储字节数不一致,因此解码时没有采用同一编码格式会解析错误
小结
3.2 字符集的编码、解码操作
代码演示:
public class Test {
public static void main(String[] args) throws Exception {
// 1、编码:把文字转换成字节(使用指定的编码)
String name = "abc我爱你中国";
// byte[] bytes = name.getBytes(); // 以当前代码默认字符集进行编码 (UTF-8)
byte[] bytes = name.getBytes("GBK"); // 指定编码
System.out.println(bytes.length);
System.out.println(Arrays.toString(bytes));
// 2、解码:把字节转换成对应的中文形式(编码前 和 编码后的字符集必须一致,否则乱码 )
// String rs = new String(bytes); // 默认的UTF-8
String rs = new String(bytes, "GBK"); // 指定GBK解码
System.out.println(rs);
}
}
小结: