目录
一、File类的概述及作用
1.1File概述
所属包 java.io
- File是文件和文件夹的抽象表现形式
- java把电脑中的文件各文件夹封装为一个File类,我们可以使用File类对文件个文件夹进行操作
1.2 File类作用
用来操作硬盘上的文件和文件夹
二、File类构造方法及常用方法
2.1 File类静态成员变量
/*
与系统有关的路径分隔符
Mac和Linux系统 :
Windows系统 ;
*/
static String pathSeparator
/*
与系统有关的默认名称分隔符
Mac和Linux系统 /
Windows系统 \
*/
static String separator
2.2 File类构造方法
File(File parent,String child)//根据父路径文件对象和子类路径字符串创建文件对象
File(String parent,String child)//根据父路径字符串和子类路径字符串创建文件对象
File(String pathname)//根据文件路径字符串创建文件对象
package com.zking.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
// 在Java程序中如何描述电脑中某个文件或者文件夹?
// 通过File类去描述
// 如何使用?-----实例化即可得到一个文件对象
//File(File parent,String child)//根据父路径文件对象和子类路径字符串创建文件对象
File file1 = new File("D:\\");
File file2 = new File(file1,"hello.text");
//File(String parent,String child)//根据父路径字符串和子类路径字符串创建文件对象
File file3 = new File("D:\\","1.txt");
//File(String pathname)//根据文件路径字符串创建文件对象
File file4 = new File("D:\\2.txt");
}
}
2.3 File类常用方法
2.3.1 File类创建文件功能
/*
根据文件路径创建文件对象
如果文件存在,则什么都不做,返回false
如果文件不存在,则创建该文件返回true
注意:只能用来创建文件,不能用来创建文件夹。
*/
boolean createNewFile();
package com.zking;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("D:\\1.txt");
try {
if (file.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件已创建,不能重复创建");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.3.2 File类创建文件夹功能
/*
创建文件夹,成功返回true,否则返回false
只能用来创建文件夹,不能用来创建文件
能创建单级文件夹
*/
boolean mkdir()
/*
创建文件夹,可以创建单级或多级文件夹
只能用来创建文件夹
*/
boolean mkdirs()
package com.zking;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("D:\\我的音乐");
if (file.mkdir()) {
System.out.println("mkdir文件夹创建成功");
} else {
System.out.println("mkdir文件夹已创建,不能再次创建");
}
File file2 = new File("D:\\我的音乐\\流行");
if (file2.mkdirs()) {
System.out.println("mkdirs文件夹目录创建成功");
} else {
System.out.println("mkdirs文件夹目录已创建,不能再次创建");
}
}
}
2.3.3 File类删除功能
/*
删除文件,如果删除成功返回true,否则返回false
注意:如果是文件夹,则要求文件夹必须为空文件夹,否则无法删除
*/
boolean delete()
package com.zking;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("D:\\我的音乐\\爱.mp3");
/*
删除文件,如果删除成功返回true,否则返回false
注意:如果是文件夹,则要求文件夹必须为空文件夹,否则无法删除
*/
System.out.println(file.delete());
}
}
2.3.4 File类获取功能
/*
获取文件大小,单位是:字节
注意:只能用来获取文件的大小,如果是文件夹,则返回值是一个垃圾直(不确定的值)
*/
long length()
/*
获取文件夹和文件的名字
*/
String getName()
/*
获取父路径字符串
*/
String getParent()
/*
获取父路径文件对象
*/
File getParentFile()
/*
获取绝对路径字符串
*/
String getAbsolutePath
/*
获取绝对路径文件对象
*/
File getAbsoluteFile()
/*
获得文件的最后修改时间
*/
long lastModified()
/*
获得文件夹下面所有文件的名字
*/
String list()
/*
获取当前文件夹下所有的文件对象(普通文件和子文件夹)
当前文件夹指方法调用者
*/
File[] listFiles()
/*
获得当前系统的盘符
*/
String[] listRoots()
package com.zking;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("D:\\我的音乐\\爱.mp3");
// length()获取文件大小,单位是:字节
System.out.println(file.length());
// getName()获取文件夹和文件的名字
System.out.println(file.getName());
// getParent()获取父路径字符串
System.out.println(file.getParent());
// getParentFile()获取父路径文件对象
System.out.println(file.getParentFile());
// getAbsolutePath获取绝对路径字符串
System.out.println(file.getAbsolutePath());
// getAbsoluteFile()获取绝对路径文件对象
System.out.println(file.getAbsoluteFile());
// lastModified() 获得文件的最后修改时间
System.out.println(file.lastModified());
// list()获得文件夹下面所有文件的名字
File file2 = new File("D:\\我的音乐");
String[] list = file2.list();
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
// listFiles()获取当前文件夹下所有的文件对象(普通文件和子文件夹)当前文件夹指方法调用者
File file3 = new File("D:\\我的电影");
File[] listFiles = file3.listFiles();
for (File file4 : listFiles) {
System.out.println(file4.getPath());
}
// listRoots()获得当前系统的盘符
File[] listRoots = File.listRoots();
System.out.println(listRoots);
}
}
2.3.5 File类判断功能
/*
判断文件或文件夹是否存在,存在返回true,否则false
*/
boolean exists()
/*
判断是否是一个普通文件,如果是返回true,否则false
如果文件不存在,则返回false
*/
boolean isFile()
/*
判断是否是一个文件夹,如果是返回true,否则发挥false
如果文件夹不存在,则返回false
*/
boolean isDirectory()
/*
判断是否是隐藏文件
*/
boolean isHidden()
package com.zking;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("D:\\我的音乐\\爱.mp3");
// exists()判断文件或文件夹是否存在,存在返回true,否则false
System.out.println(file.exists());
// isFile()判断是否是一个普通文件,如果是返回true,否则false如果文件不存在,则返回false
System.out.println(file.isFile());
// isDirectory()判断是否是一个文件夹,如果是返回true,否则发挥false如果文件夹不存在,则返回false
System.out.println(file.isDirectory());
// isHidden()判断是否是隐藏文件
System.out.println(file.isHidden());
}
}
三、Java递归
具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
简单的说:递归就是在方法中调用方法本身。
3.1 递归分类
递归的分类
直接递归:方法A调用方法A
间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A
3.2 注意事项
递归的两个条件
可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
存在一种简单情境,可以使递归在简单情境下退出。(递归出口)注意事项
递归必须要有出口:结束递归的条件
递归次数不要太多
构造方法不能使用递归
3.3 递归小练习
package com.zking;
public class Test {
public static void main(String[] args) {
System.out.println(sum(100));
}
/**
* 方法功能:递归进行1-100的和
* @param n
* @return
*/
public static int sum(int n) {
if (n == 1) {
return 1;
} else {
return n + sum(n - 1);
}
}
}
四、File类经典小案例
package com.zking.test;
import java.io.File;
public class Demo {
//f(x) = f(x-1)+f(x-2)
public static int f(int x) {//x = 21
if(x == 1 || x == 2) {
return 1;
}
return f(x-1)+f(x-2);
}
/**
* 方法功能:查找D:\\mylove文件夹目录下得所有文件信息(文件)
* @param args
*/
public static void findFileAll(File file) {
//1.判断参数file是文件还是文件夹
if(file.isFile()) {//file是文件对象
System.out.println("名称: "+file.getName());
}else if(file.isDirectory()) {//file是文件夹对象
//获取该文件夹下得所有文件信息
File[] files = file.listFiles();
//判断如果是系统文件 直接排除
if(files == null) {
return;
}
for (File file2 : files) {
findFileAll(file2);
}
}
}
/**
* 方法功能:查找D盘根目录下得所有.txt文件
* @param args
*/
public static void findTxtAll(File file) {
//判断file是文件还是文件夹
if(file.isFile()) {
//判断该文件是否是.txt结尾的
//利用截取技术
//获取该文件的名字
String fileName = file.getName();
//根据名字获取最后一个.的下标位置
int index = fileName.lastIndexOf('.');
if(index!=-1) {//该文件存在.
String hz = fileName.substring(index);
//判断
if(".txt".equals(hz)) {
System.out.println(fileName);
}
}
}else if(file.isDirectory()) {//文件夹
//获取该文件夹下得所有文件
File[] file2 = file.listFiles();
if(file2==null) {
return;
}
//遍历得到每一个File对象信息
for (File file3 : file2) {//4个文件夹
//递归调用本身回到起点 重新判断每个file3对象是文件还是文件夹
findTxtAll(file3);
}
}
}
/**
* 方法功能:删除某目录下得所有.txt文件
* @param args
*/
public static void delTxtAll(File file) {//D:\\mylove
//1.判断参数file是文件还是文件夹
if(file.isFile()) {//参数file对象是文件对象
//System.out.println("文件对象");
//判断file文件是否以.txt结尾的文件
//①获取该文件对象的名称
String fileName = file.getName();
//System.out.println("文件名称: "+fileName);
//②获取该文件名称最后一次出现"."的下标位置
int index = fileName.lastIndexOf('.');
//System.out.println("下标: "+index);
//判断index是否存在
if(index!=-1) {//说明文件中有"."
//截取后缀名
String hz = fileName.substring(index);
//System.out.println("后缀名: "+hz);
//判断:获取的后缀是否是.txt
if(".txt".equals(hz)) {
//删除该文件了
file.delete();
}
}
}else if(file.isDirectory()) {//参数file对象是文件夹对象
//System.out.println("文件夹对象");
//获取该文件夹下得所有文件对象
File[] files = file.listFiles();
if(files==null) {
return;
}
//遍历得到每一个文件对象 继续去判断是否是文件还是文件对象 --递归掉自己
for (File file2 : files) {
delTxtAll(file2);
}
}
}
public static void main(String[] args) {
//注意事项:如果目录有系统隐藏文件 必须判断 返回出去
File file = new File("D:\\mylove");
// findFileAll(file);
// findTxtAll(file);
delTxtAll(file);
}
}