JAVA第十五天(一)
递归
递归就是方法调用方法自身。递归一定有跳出条件。
public static void main(String[] args){
diGui(0);
}
public static void diGui(int i) {
if(i < 5) {
i++;
System.out.println("这句话将被重复输出!"+i);
diGui(i);
}
}
输出结果:
这句话将被重复输出!1
这句话将被重复输出!2
这句话将被重复输出!3
这句话将被重复输出!4
这句话将被重复输出!5
File
我们的操作系统中所有的设备的体现都是文件(包含文件夹),Java对文件做了抽象,在JavaIO包中提供了文件的操作功能。
常用构造器
注意:路径名的字符串内既可"C:\\"也可"C:/"
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
例:
第一种方法:
File file = new File("C:/");
File file2 = new File(file,"Test.txt");
System.out.println(file2);
第二种方法:
File file = new File(new File("C:\\"),"Test.txt");
输出结果:
C:\Test.txt
C:\Test.txt
---------------------------------------------------------------------------------
File(String pathname)(推荐使用!)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
例:
File file = new File("C:/Test.txt");
System.out.println(file);
输出结果:
C:\Test.txt
---------------------------------------------------------------------------------
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
例:
File file = new File("C:/","Test.txt");
System.out.println(file);
输出结果:
C:\Test.txt
---------------------------------------------------------------------------------
常用方法
创建文件
返回值类型 方法名 参数列表
boolean createNewFile()
当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
(调用该方法的语句会存在异常,可选择向上抛出或try...catch,此处向上抛出了)
例:
public static void main(String[] args) throws IOException {
File file = new File("C:/Test.txt");
System.out.println(file.createNewFile());
}
输出结果:
true
---------------------------------------------------------------------------------
创建目录
boolean mkdir()
创建由此抽象路径名命名的目录。
例:
public static void main(String[] args) throws IOException {
File file = new File("C:/Test");
System.out.println(file.mkdir());
}
输出结果:
true
---------------------------------------------------------------------------------
boolean mkdirs()
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
(用于在已存在父目录中创建子目录,当父目录不存在时会自动创建)
例:
File file = new File("C:/Test/Test");
System.out.println(file.mkdirs());
输出结果:
true
---------------------------------------------------------------------------------
删除文件或目录
boolean delete()
删除由此抽象路径名表示的文件或目录。如果此路径名表示目录,则目录必须为空才能删除。
例:
public static void main(String[] args) throws IOException {
File file = new File("C:/Test/Test.java");
System.out.println(file.createNewFile());
// 删除文件
System.out.println(file.delete());
// 删除空目录
System.out.println(new File("C:/Test/Test").delete());
}
输出结果:
true
true
true
---------------------------------------------------------------------------------
相对路径的创建于删除(项目目录)
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
//创建相对路径目录
System.out.println(file.mkdir());
//创建相对路径文件
System.out.println(file2.createNewFile());
//删除相对路径文件
System.out.println(file2.delete());
//删除相对路径目录
System.out.println(file.delete());
}
输出结果:
true
true
true
true
---------------------------------------------------------------------------------
文件的判断
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
System.out.println(file.mkdir());
System.out.println(file2.createNewFile());
System.out.println(file2.exists());
System.out.println(file.exists());
}
输出结果:
true
true
true
true
---------------------------------------------------------------------------------
boolean isFile()
测试此抽象路径名表示的文件是否为普通文件。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
System.out.println(file2.isFile());
}
输出结果:
true
---------------------------------------------------------------------------------
boolean isDirectory()
测试此抽象路径名表示的文件是否为目录。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
System.out.println(file.isDirectory());
}
输出结果:
true
---------------------------------------------------------------------------------
boolean isAbsolute()
测试这个抽象路径名是否是绝对的。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
File file3 =new File("C:/");
file.mkdir();
file2.createNewFile();
System.out.println(file.isAbsolute());
System.out.println(file3.isAbsolute());
}
输出结果:
false
true
---------------------------------------------------------------------------------
boolean canRead()
测试应用程序是否可以读取由此抽象路径名表示的文件。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
System.out.println(file2.canRead());
}
输出结果:
true
---------------------------------------------------------------------------------
boolean canWrite()
测试应用程序是否可以修改由此抽象路径名表示的文件。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
System.out.println(file2.canWrite());
}
输出结果:
true
---------------------------------------------------------------------------------
boolean isHidden()
测试此抽象路径名命名的文件是否为隐藏文件。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
System.out.println(file2.isHidden());
}
输出结果:
true
---------------------------------------------------------------------------------
文件的获取
String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
返回此抽象路径名的绝对形式。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
String str = file2.getAbsolutePath();
System.out.println(str);
}
输出结果:
E:\JAVA\eclipse workspace GBK\TestAll\Test\Test.txt
---------------------------------------------------------------------------------
String getPath()
将此抽象路径名转换为路径名字符串。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
String str = file2.getPath();
System.out.println(str);
}
输出结果:
Test\Test.txt
---------------------------------------------------------------------------------
String getName()
返回由此抽象路径名表示的文件或目录的名称。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
String str = file2.getName();
System.out.println(str);
}
输出结果:
Test.txt
---------------------------------------------------------------------------------
long length()
返回由此抽象路径名表示的文件的长度。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
long lg = file2.length();
System.out.println(lg);
}
输出结果:
0
---------------------------------------------------------------------------------
long lastModified()
返回此抽象路径名表示的文件上次修改的时间。
例:
public static void main(String[] args) throws IOException {
File file = new File("Test");
File file2 = new File("Test/Test.txt");
file.mkdir();
file2.createNewFile();
long lg = file2.lastModified();
System.out.println(lg);
//将时间格式转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(lg);
System.out.println(sdf.format(date));
}
输出结果:
2020-03-22 09:06:50
---------------------------------------------------------------------------------
目录的子文件获取
static File[] listRoots()
列出可用的文件系统根。
例:
File[] fe = File.listRoots();
for(File f:fe) {
System.out.print(f+" ");
}
输出结果:
B:\ C:\ D:\ E:\ F:\ G:\ H:\ J:\ L:\
---------------------------------------------------------------------------------
File[] listFiles()
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
例:
public static void main(String[] args) throws IOException {
File file = new File("C:/Users");
File[] fe = file.listFiles();
for(File f:fe) {
System.out.println(f);
}
输出结果:
C:\Users\Administrator
C:\Users\All Users
C:\Users\Default
C:\Users\Default User
C:\Users\desktop.ini
C:\Users\Public
---------------------------------------------------------------------------------
String[] list()
返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。(文件和目录名)
例:
File file = new File("C:/tmp");
String[] s = file.list();
for(String str:s) {
System.out.println(str);
}
输出结果:
build.properties
config
modules
var
---------------------------------------------------------------------------------
递归输出指定目录下的所有目录及文件
ListFile类
import java.io.File;
public class ListFiles {
public static int level = -1;
public static void printFile(File file) {
// 判断是否为目录
if(!file.isDirectory()) {
return;
}
// 判断文件或目录是否存在
if(!file.exists()) {
return ;
}
level++;
File[] files = file.listFiles();
for(File file1:files) {
// 此处for循环用于输出缩进,形成格式
for(int i = 0;i<level;i++) {
System.out.print("\t");
}
String name = file1.getName();
System.out.println(name);
//先判断是否为目录
if(file1.isDirectory()) {
//使用递归
printFile(file1);
}
}
level--;
}
}
测试类
public class FileTest {
public static void main(String[] args){
File file = new File("C:/Test");
ListFiles.printFile(file);
}
输出结果:
Test1
1.txt
Test1(1)
1(1).txt
Test2
2.txt
Test3
3.txt
Test4
4.txt
Test5
5.txt
---------------------------------------------------------------------------------
删除一个文件夹下的所有文件及根目录
DeleteFile类
public class DeleteFile {
public static void deleteFile(File file) {
// 判断是否为目录
if(!file.isDirectory()) {
return;
}
// 判断文件或目录是否存在
if(!file.exists()) {
return;
}
File[] files = file.listFiles();
for(File file1:files) {
// 如果是文件将执行删除操作
if(file1.isFile()) {
file1.delete();
if(!file1.exists()) {
System.out.println(file1.getName()+"文件删除成功!");
}else {
System.out.println(file1.getName()+"文件删除失败!");
}
}else{
deleteFile(file1);
}
// 如果是目录将执行删除操作(可选)
// 注意:只有目录为空时才能被删除
if(file1.isDirectory()) {
file1.delete();
if(!file1.exists()) {
System.out.println(file1.getName()+"目录删除成功!");
}else {
System.out.println(file1.getName()+"目录删除失败!");
}
}
}
//最后删除根目录(可选)
if(file.length() == 0) {
file.delete();
if(!file.exists()) {
System.out.println(file.getName()+"目录删除成功!");
}
}
}
}
测试类
public static void main(String[] args){
File file = new File("C:/Test");
DeleteFile.deleteFile(file);
}
输出结果:
1.txt文件删除成功!
1(1).txt文件删除成功!
Test1(1)目录删除成功!
Test1目录删除成功!
2.txt文件删除成功!
Test2目录删除成功!
3.txt文件删除成功!
Test3目录删除成功!
4.txt文件删除成功!
Test4目录删除成功!
5.txt文件删除成功!
Test5目录删除成功!
Test目录删除成功!