File类
- File类的对象代表操作系统的文件(文件、文件夹),File类在java.io.File包下
- File类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功能
File类创建对象
方法名称 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
绝对路径和相对路径
绝对路径:从盘符开始,如
File file1 = new File(“D:\\study\\a.txt”);
相对路径:不带盘符,默认直接到当前工程下的目录寻找文件,如
File file3 = new File(“模块名\\a.txt”);
File类的判断文件类型、获取文件信息功能
方法名称 | 说明 |
---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量) |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(时间毫秒值) |
File类创建文件的功能
方法名称 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
File类删除文件的功能
方法名称 | 说明 |
---|---|
public boolean delete() | 删除由此抽象路径名表示的文件或空文件夹 |
注意:delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站
File类的遍历功能
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的“一级文件名称”到一个字符串数组中去返回。 |
public File[] listFiles()(常用) | 获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(重点) |
listFiles方法注意事项:
当文件不存在时或者代表文件时,返回null
当文件对象代表一个空文件夹时,返回一个长度为0的数组
当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当没有权限访问该文件夹时,返回null
方法递归
定义:方法调用自身的形式称为递归(recursion),递归做为一种算法在程序设计语言中广泛应用
形式
- 直接递归:方法自己调用自己
- 间接递归:方法调用其他方法,其他方法又回调方法自己
存在的问题:递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出现象
案例1:递归求1-n的和

public static int f(int n) {
if(n == 1){
return 1;
}else{
return n + f(n-1);
}
}
案例2:文件搜索
需求:从某路径下搜索出某个文件名称并输出绝对路径
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:啤酒问题
需求:啤酒2元1瓶,4个盖子可以换一瓶,2个空瓶可以换一瓶,请问10元钱可以喝多少瓶酒,剩余多少空瓶和盖子。
public class Test3 {
// 定义一个静态的成员变量用于存储可以买的酒数量
public static int totalNumber; // 总数量
public static int lastBottleNumber; // 记录每次剩余的瓶子个数
public static int lastCoverNumber; // 记录每次剩余的盖子个数
public static void main(String[] args) {
// 1、拿钱买酒
buy(10);
System.out.println("总数:" + totalNumber);
System.out.println("剩余盖子数:" + lastCoverNumber);
System.out.println("剩余瓶子数:" + lastBottleNumber);
}
public static void buy(int money){
// 2、看可以立马买多少瓶
int buyNumber = money / 2; // 5
totalNumber += buyNumber;
// 3、把盖子和瓶子换成钱
// 统计本轮总的盖子数和瓶子数
int coverNumber = lastCoverNumber + buyNumber;
int bottleNumber = lastBottleNumber + buyNumber;
// 4、更新每次剩余的盖子数和瓶子数
lastCoverNumber = coverNumber % 4;
lastBottleNumber = bottleNumber % 2;
// 5、判断是否够换成钱
if(coverNumber / 4 != 0 || bottleNumber / 2 != 0){
// 够,计算出能换成多少钱,并重新迭代
int allMoney = (coverNumber / 4 + bottleNumber / 2) * 2;
buy(allMoney);
}
}
}
字符集
计算机底层不可以直接存储字符的,计算机底层只能存储二进制
计算机可以给人类字符进行编号存储,这套编号规则就是字符集
字符集(Character Set)是多个字符的集合
常见字符集有ASCII字符集、GBK字符集以及Unicode(UTF-8)字符集等
ASCII字符集
- ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字、英文、符号
- ASCII使用一个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于表示英文、数字来说是够用
GBK
GBK是中国的码表,包含了几万个汉字等字符,同时也要兼容ASCII编码
GBK编码中一个中文字符一般以两个字节的形式存储
Unicode字符集
统一码,也叫万国码。是计算机科学领域里的一项业界标准
UTF-8是Unicode的一种常见编码方式,一般以三个字节的形式存储,同时也要兼容ASCII编码表,英文和数字在任何国家的编码中都不会乱码
注意:技术人员都应该使用UTF-8的字符集编码,编码器前和编码后的字符集要一致,否则会出现中文乱码。
String编码
方法名称 | 说明 |
---|---|
byte[] getBytes() | 使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
String解码
构造器 | 说明 |
---|---|
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的 String |