1、File类的概述
File类:代表了当前操作系统的文件对象。
File类用来操作操作系统的文件对象的,删除文件、获取文件信息,创建文件或者文件夹...
广义上来说操作系统认为文件包括文件和文件夹
File类的创建文件对象的API:
包:Java.io.FIle
构造器:
--public File(String pathName):根据路径获取文件对象。
--public File(String parent,String child):根据父路径和文件名称获取文件对象。
--public File(File parent,String child):根据父路径文件对象获取文件夹中的文件。
File类创建文件对象的格式:
a、File f = new File("绝对路径/相对路径");
绝对路径:从磁盘的盘符开始一路走的路径。
很依赖环境,一旦脱离,直接崩溃
相对路径:
--默认是直接相对到工程 目录下寻找文件的。
--相对路径只能用于寻找工程文件。
--能用相对路径就尽量使用相对路径,可以跨平台!!
b.File f = new File("文件对象/文件夹对象");
小结:
创建文件对象可以用绝对路径也可以用相对路径。
相对路径用于寻找工程下的文件。
文件对象可以表示文件,也可以表示文件夹
public class FileDemo {
public static void main(String[] args) {
File file = new File("C:\\Users\\javac\\Pictures\\Screenshots\\屏幕截图 2024-01-06 163750.png");
System.out.println(file.length()/1024+"KB");//字节大小,1字节=8bit,1k=1024字节
//2.创建文件对象,使用相对路径,从项目下开始
File file1 = new File("Day09Demo/src/test.txt");
System.out.println(file1.length()+"B");
//3.根据父文件对象,创建文件
File filePath = new File("Day09Demo/src");
File file2 = new File(filePath, "test4.txt");
System.out.println(file2.length());
}
}
1.1、File类的判断功能的方法
--public boolean exists():此File表示的文件或者目录是否实际存在;
、 --public boolean isDirectory() :此File表示的是否是文件夹。
--public boolean isFile():此File表示的是否是文件.
例子:
public class FileDemo {
public static void main(String[] args) {
File file = new File("C:\\Users\\javac\\Pictures\\Screenshots\\屏幕截图 2024-01-06 163750.png");
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
File file1 = new File("C:\\Users");
System.out.println(file1.exists());
System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
}
}
1.2、File类的创建和删除的方法
--public boolean createNewFile():当且仅当具有该名称的文件尚不存在的时候,创建一个新的文件。
--public boolean delete():删除由此File表示的目录。
--public boolean mkdir():创建由此File表示的单级目录。
--public boolean mkdirs():可以创建多级目录。
public class FIleDemo {
public static void main(String[] args) throws IOException {
// File file =new File("Day09Demo/src/test01.txt");
//a.创建新文件,创建成功返回true,反之
// System.out.println(file.createNewFile());
//b.删除文件或者空文件夹。
// System.out.println(file.delete());
// File file = new File("D:\\test");
//c.创建一级文件夹
// System.out.println(file.mkdir());
File file = new File("D:\\test\\a\\a\\b");
//d.创建多级目录
System.out.println(file.mkdirs());
}
}
1.3、File目录的遍历:
--public String[] list();
获取当前目录下的所有"一级文件名称"到一个字符串数组去返回。
--public File[] listFiles();
获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回。
public class FileDemo {
public static void main(String[] args) {
File file = new File("E:\\");
//获取当前目录对象下的全部一级文件名称到一个字符串数组返回。
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
//获取当前目录对象下的全部一级文件对象到一个File类型的数组返回。
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1.getAbsoluteFile());
}
//扩展
File filez = new File("C:\\Users\\javac\\Pictures\\Screenshots\\屏幕截图 2024-01-06 163750.png");
long l = filez.lastModified();//最后修改时间
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy/MM/dd");
String format = simpleDateFormat.format(l);
System.out.println(format);
}
}
1.4、案例:递归实现文件搜索
public class FileSearchDemo {
public static void main(String[] args) {
// System.out.println(sum(10));
File file = new File("E:\\Document");
File file1 = searchFile(file, "tsconfig.json");
System.out.println(file1.getAbsoluteFile());
}
//非规律化递归搜索一个文件夹下的文件
public static File searchFile(File path,String file){
if (path.isDirectory() && path.exists()){//先判断是否是文件夹
File[] files = path.listFiles();//找到所有文件对象
if (files!=null && files.length>0){//如果当前文件夹不为空
for (File f : files) {
if (f.isFile()){
if(f.getName().contains(file)){
return f;
}
}else{
File result = searchFile(f, file);
if (result != null) {
return result; // 如果找到文件,立即返回结果
}
}
}
}
}
return null;
}
}
2、字符集概述
字符集:各个国家为自己国家字符取了一些编号编码。
计算机的底层是不能直接存储的。
计算机的底层只能存储二进制。010101
二进制就是可以转成10进制,10进制就是整数编号。
美国人:
8个开关就可以编码字符,1字节足以,
这里因为1字节=8bit.
也就是00000000-11111111
这里有256中编码。2^8
a 97
b 98
...
A 65
B 66
....
0 48
1 49
组成ASCLL编码
所以英文字符就一个字符占1B
256足以表示英文和数字等符号。
中国人:
中国文字,有很多字符,9万左右的字符。65536=2^16
中国人采用2个字节编码一个中文字符
这套编码叫GBK编码。
他必须兼容ASCLL码
美国人:
这样吧,我来收集全球所有字符,统一编码,这套编码叫做unicode(万国码)
UTF-8就是变种形式
UTF-8中文一般占3字节
技术人员首选UTF-8编码
所以,在进行编码时候,有时候出现乱码问题其实就是编码没有弄对的问题,把GBK文件编码的形式采用UTF-8解析就会乱码。