Javase 基础加强 —— 07 File
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。
01 存储数据的方案
变量、数组、对象、集合这些数据容器都在内存中,一旦程序结束,或者断电,数据就没有了!
File
在磁盘中,数据会一直存在。
File
是java.io.
包下的类,File
类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)
注:File
类只能对文件本身进行操作,不能读写文件里面存储的数据,IO
流才能真正读写数据!
IO
流是用于读写数据的(可以读写文件,或网络中的数据…)
02 FILE
注意:
File
对象既可以代表文件、也可以代表文件夹。File
封装的对象仅仅是一个路径名,路径可以是存在的,也允许是不存在的。
package FileDemo;import java.io.File;
import java.io.IOException;public class FileDemo1 {public static void main(String[] args) throws IOException {//目标:认识File类和对象//1.创建File对象,获取文件信息File f1 = new File("E:\\临时传图专用\\123.png");System.out.println(f1.length());System.out.println(f1.getName());System.out.println(f1.isFile()); //trueSystem.out.println(f1.isDirectory()); //false//2.相对路径:当前文件夹寻找// 绝对路径:电脑磁盘符寻找//3.创建File对象,代表不存在的文件File f2 = new File("E:\\临时传图专用\\456.png");System.out.println(f2.exists());System.out.println(f2.createNewFile());//4.创建File对象,代表不存在的文件路径//注:mkdir只能创建一级文件夹,mkdirs可以创建多级文件夹File f3 = new File("E:\\临时传图专用\\aaa");System.out.println(f3.mkdir());File f4 = new File("E:\\临时传图专用\\bbb\\ccc\\ddd");System.out.println(f4.mkdirs());//5.创建File对象,删除文件/文件夹//注:delete只能删除非空文件夹,不进回收站File f5 = new File("E:\\临时传图专用\\456.png");System.out.println(f5.delete());File f6 = new File("E:\\临时传图专用\\aaa");System.out.println(f6.delete());//6.遍历,获取某文件夹下的全部一级文件名称File f7 = new File("E:\\JS");String[] names = f7.list();for(String name : names){System.out.println(name);}File[] files = f7.listFiles();for(File file : files){System.out.println(file.getAbsoluteFile()); //获取绝对路径}}
}
03 认识递归
方法调用自身的形式称之为方法递归。
递归 = 递归式 + 递归边界
04 递归流程
package FileDemo;public class RecursionDemo1 {public static void main(String[] args) {System.out.println(eatPeach(1));}public static int eatPeach(int day){//递归边界if(day == 10){return 1;}//递归公式//f(n + 1) = f(n) / 2 - 1//f(n) = (f(n + 1) + 1) * 2return (eatPeach(day + 1) + 1) * 2;}
}
05 文件搜索
从D:
盘中,搜索"QQ.exe"
这个文件,找到后直接输出其位置。
package FileDemo;import java.io.File;public class RecursionDemo1 {public static void main(String[] args) {File dir = new File("E:/");searchFile(dir, "vue.js");}public static void searchFile(File dir, String fileName){if(dir == null || !dir.exists() || dir.isFile()){return;}File[] files = dir.listFiles();if(files != null && files.length != 0){for(File file : files){//file是文件if(file.isFile()){if(file.getName().contains(fileName)){System.out.println("找到目标文件:" + file.getAbsolutePath());}}//file是文件夹else{searchFile(file, fileName);}}}}
}
dir == null
:防止传入空值,避免空指针异常;!dir.exists()
:目录不存在,没法继续递归;dir.isFile()
:判断传入的dir
是不是一个文件,不是目录。
06 常见字符集介绍
标准ASCII
字符集
ASCII(American Standard Code for Information Interchange)
为美国信息交换标准代码,包括了英文、符号等。- 标准
ASCII
使用1个字节存储一个字符,首位是0,因此,总共可表示128个字符,对美国佬来说完全够用。
国标GBK
字符集
汉字编码字符集,包含了2万多个汉字等字符,GBK
中一个中文字符编码成两个字节的形式存储。
注:GBK
兼容了ASCII
字符集。
万国码 Unicode
字符集
Unicode
是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
UTF-8
字符集
UTF-8
字符集是Unicode
字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。
注:英文字符、数字等只占1个字节(兼容标准ASCII
编码),汉字字符占用3个字节。
注:
① 字符编码时使用的字符集,和解码时使用的字符集必须一致,否则,出现乱码。
② 英文、数字一般不会乱码,因为很多字符集都兼容了ASCII
编码。
07 编码和解码操作
package FileDemo;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class CharSetDemo1 {public static void main(String[] args) throws UnsupportedEncodingException {//目标:实现字符编码 + 解码//1.编码String name = "我爱你中国abc666";byte[] bytes1 = name.getBytes(); //默认UTF-8编码byte[] bytes2 = name.getBytes("GBK");System.out.println(bytes2.length);System.out.println(Arrays.toString(bytes2));//2.解码String name2 = new String(bytes2, "GBK");System.out.println(name2);}
}