File类;常用方法(创建方法;删除方法;重命名方法;判断方法;获取功能)(Java Day18)
一,File类
- 概述:文件和目录【文件夹和盘符】路径名的抽象表示形式。文件和目录在内存中的另外一种表现形式。
- 路径:文件或目录在磁盘中的位置的地址 比如:E:\工作\春节假期\网课0210\day18
- 分为:
- 绝对路径:从根目录开始一直到文件本身的位置的地址
- 根路径:
2.1 windows系统:根路径就是盘符路径【盘符就是硬盘的分区的名称】
2.2 比如: C: D:
2.3 mac、linux系统:根路径就是【/】
2.4 windows、Mac、linux、Unix都属于电脑的操作系统【属于系统软件】
3. 相对路径:相对于某个路径而言的路径【有一个参考的路径】
3.1 在eclipse当中相对路径相对于工程路径
3.2 比如:eclipse 的day18工程下的a文件夹:
4. 绝对路径: E:\eclipse_code\java0210\Day18\a \b 【全路径】
5. 相对路径:【部分的路径】
a文件夹的相对路径是 a
b 文件夹的相对路径是:a \b
相对于:E:\eclipse_code\java0210\Day18【工程路径】
- 注意事项:文件和文件路径使用分隔符隔开
- 分隔符有两种:
正斜杠:需要写两个【\\】
windows系统使用多一些
反斜杠:只需要写一个【/】 Linux系统使用多一些
-
构造方法:
- File(String path): 创建一个path路径对应的文件的file对象
- File(String path1,String path2): 创建一个path1和path2拼接后的路径对应文件的fIle对象
- File(File file1,String path2): 创建一个file1对象对应路径和path2拼接后路径对应的文件的file对象
- 注意事项:file对象的创建和路径对应的文件是否存在是没有关系的,照样创建对象出来
代码示例
import java.io.File;
public class Demo_File {
public static void main(String[] args) {
File file =new File("E:\\ eclipse_code/java0210\\Day18\\a");
File file2 =new File("a");
//file和file2都代表了a文件夹的对象
//创建文件对象 有三种方式 三种构造方法
//使用绝对路径创建文件的对象
File file3 =new File("E:\\eclipse_code\\java0210\\Day18\\b");
System.out.println(file3); // E:\eclipse_code\java0210\Day18\b
//使用相对路径创建对象
File file4 = new File("b");
//获取file4 的全路径
System.out.println(file4.getAbsolutePath());// /Users/apple/eclipse-workspace/Day_18/b
File file5 = new File("b/c"); //苹果系统与Windows系统不一样-----\
//使用两个路径创建对象 [两个路径是有关系 拼接关系 包含关系]
File file6 = new File("b","c");
System.out.println(file5); // b/c
System.out.println(file6); // b/c
//使用file对象和一个路径创建对象 [对象和路径有关系,对象是路径的上一层路径的文件对象]
File file7 =new File(file4,"c");
System.out.println(file7); // b/c
}
}
二,常用方法
-
创建方法
- createNewFile():在对应的文件路径下创建一个真正的文件出来
- 注意事项:创建的文件要保证他所在的文件夹一定要存在,不存在创建不了
- mkdir():创建单级文件夹
- 注意事项:创建的文件夹要保证他的上层一定要存在,不存在创建不了
- mkdirs():创建多级文件夹
- 注意事项:创建的文件如果已经存在了就不会再创建。
- 创建文件的步骤:
- 先得到要创建的文件的file对象
- 使用该对象调用对应的创建方法创建文件
代码示例
import java.io.File;
import java.io.IOException;
public class Demo_File02 {
public static void main(String[] args) throws IOException {
//首先创建文件,先得到所要创建的文件的对象
//需求:在本工程下的a文件夹中创建一个b.txt文件
File file = new File("a/b.txt"); //它就是b.txt文件的文件对象----相对路径
boolean b= file.createNewFile(); //这个方法的返回值是布尔类型的
//结果如果是true创建成功了,如果是false则创建失败
System.out.println(b);
System.out.println(file.exists()); //检查这个file文件是否存在
System.out.println(System.getProperty("user.dir"));
System.out.println(file.getAbsolutePath()); //获取file文件的绝对路径
//在a文件夹下面创建b文件夹
File file2 =new File("a/b"); //file2就是b文件夹的文件对象
boolean c = file2.mkdir();
System.out.println(c);
//在本工程中创建一个m\\n\\a\\d
File file3 = new File("m/n/a/d"); //d文件夹的文件对象
boolean d= file3.mkdirs();
System.out.println(d);
System.out.println(file3.getAbsolutePath());
}
}
练习
- 在D盘下创建a/b/c/d文件夹 同时在d文件夹中创建名为'HelloWorld.txt'文件
代码示例
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class Demo_File03 {
public static void main(String[] args) throws IOException {
File file = new File("a/b/c/d");
boolean d =file.mkdirs();
System.out.println(d);
System.out.println(file.getAbsolutePath());
File file1 = new File(file,"HelloWorld.txt");
boolean b = file1.createNewFile();
System.out.println(b);
System.out.println(file1.getAbsolutePath());
String [] list = file1.list();
System.out.println(Arrays.toString(list));
}
}
-
删除方法
- delete():删除文件或文件夹
- 注意事项:删除文件夹的时候,要求要删除的文件夹必须是空的;不会走回收站,恢复不了
代码示例
import java.io.File;
public class Demo_File04 {
public static void main(String[] args) {
//删除a\\b.txt
File file = new File("a/b.txt");
boolean a = file.delete();
System.out.println(a);//true, b.txt被删除了
//先删除b再删除a
File file1 =new File("a/b");
boolean b = file1.delete();
System.out.println(b); //true,先删除b再删除 a就可以了
//删除a文件夹
File file2 = new File("a");
boolean c =file2.delete();
System.out.println(c);//false,因为a文件夹里面有b 所以删除不了
//删除文件夹必须里面是空的才能删除,如果不是空的得先把里面的文件先删了再删除文件夹
}
}
-
重命名方法
- renameTo(File f): 把调用者的文件名改成 参数文件对象对应文件的名称
- 注意事项:
- 调用文件对象和参数的文件对象在同一个文件夹下,就是重命名
- 调用文件对象和参数的文件对象不在同一个文件夹下,就是剪切
代码示例
import java.io.File;
public class Demo_File05 {
public static void main(String[] args) {
//改哪个文件夹的名字先得到文件的文件对象
File file =new File("m/n/a/d");
File file1=new File("m/n/a/dd");
boolean a= file.renameTo(file1);
System.out.println(a); //true
File file2=new File("m/n");
File file3=new File("a/b");
File file4=new File("a/n");
file3.mkdirs();//创建多级文件夹
boolean b =file2.renameTo(file3);//把 m文件夹下面的n改到a文件夹下面为b,由于b已经存在所以更改失败
System.out.println(b); //false
boolean b1 =file2.renameTo(file4);
System.out.println(b1); //true m里面的n去到了a文件夹里面的n
}
}
-
判断方法
- exists():判断调用file对象对应的文件在磁盘中是否存在
- isFile():判断文件对象对应的文件是不是文件
- isDirectory():判断文件对象对应的文件是不是文件夹
- 返回值都是 boolean 类型
- 注意事项: 判断是否为文件或文件夹的方法使用前提是调用对象对应的文件一定要存在
代码示例
import java.io.File;
import java.io.IOException;
public class Demo_File06 {
public static void main(String[] args) throws IOException {
File file= new File("m/b"); //b文件对象存在,文件不存在
System.out.println(file);
boolean a= file.exists(); //判断文件是否存在
System.out.println(a); //false
File file1= new File("m");
boolean b = file1.exists();
System.out.println(b); //true m的文件对象及文件都存在
File file2= new File(file,"a.txt");
System.out.println(file2.isFile());//a.txt是不是文件----false,由于现在不存在
file2.createNewFile(); //创建了文件,所以文件真实的存在了
System.out.println(file2.isFile()); //true
System.out.println(file1.isDirectory()); //true 判断文件对象对应的是不是文件夹
System.out.println(file2.isDirectory()); //false
}
}
-
获取功能
- getAbsolutePath():获取对应文件的绝对路径
- getPath():获取对应文件对象构造方法里面的那个路径
- getName():获取的是文件名称【路径最后一层的内容】
- length():获取文件大小【返回的是字节个数】
//length()这个方法基本不会给文件夹使用,只会给文件使用。因为文件夹没有大小,文件夹的大小由 他包含的文件的大小决定的,大小可变的。
//如果使用文件夹对象调用length方法,根据系统的不用返回的结果也不同,有的返回0、有的会返回4096、有的直接报错。
- String[] list(): 获取文件夹中所有文件的路径到数组中【只能给文件夹对象】
- File[] listFiles(): 获取文件夹中所有文件的文件对象到数组中【文件夹对象】
-
练习
- 键盘录入一个文件路径,判断他是否为文件夹,是文件夹就返回其中的所有文件
- 同时将该文件夹下大于10M的文件打印出来。
代码示例
import java.io.File;
import java.util.Scanner;
public class Demo_File07 {
public static void main(String[] args) {
// 1,键盘录入文件路径
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个文件夹路径:");
String path = sc.nextLine();
// 2,路径变成对应的文件对象
File file = new File(path);
// 3,判断是否是文件夹
if (file.isDirectory()) {
// 4,如果是文件夹的话获取路径里面的所有的文件
File[] files = file.listFiles();
for (File file2 : files) { // file2是得到的所有文件
// 如果file2是文件就返回文件夹并把大于10M的文件打印出来
if (file2.isFile()) {
if (file2.length() >10*1024) {
System.out.println(file2);
}
}
}
// 5,否则没有找到该文件夹
} else {
System.out.println("你的文件未找到");
}
}
}
-
练习
- 键盘录入一个字符串路径,如果不是文件夹路径提示重新录入;如果是则打印该文件夹下所有大于20M的后缀名为.mp4的文件的绝对路径
代码示例
import java.io.File;
import java.util.Scanner;
public class Demo_File08 {
public static void main(String[] args) {
// 1,键盘录入字符串路径
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
String path = sc.nextLine();
// 2,创建文件对象存放录入进来的文件夹
File file = new File(path);
// 判断是否是文件夹
if (file.isDirectory()) {
// 如果是,获取文件夹里面的所有的文件
File[] files = file.listFiles();
// 通过遍历获取每一个文件
for (File file2 : files) {
// 判断是否是文件
if (file2.isFile()) {
// 判断每一个文件是否大于等于20兆同时以mp4为后缀名的
if (file2.length() >= 10*1024 && file2.getName().endsWith(".mp4")) {
// 打印符合条件的每一个文件的绝对路径
System.out.println(file2.getAbsolutePath());
}
}
}
break;
// 3,否则输出,没有找到符合条件的文件
} else {
System.out.println("没有找到符合条件的文件");
}
}
}
}