-
File类是什么
•File类代表一个特定的文件或者目录,并提供了若干方法对该文件或目录进行操作。
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");//路径为目录
File file2 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131\\README.html");//路径为文件
}
}
File类创建对象时调用默认的有参构造方法,这里使用的是File(String pathname)参数为String类型的一个指定路径,这个路径既可以是目录,也可以是文件。当file对象路径为目录时,其表示目录,当其路径为文件时,就代表文件。
-
File类构造方法
第一个方法刚刚已经演示,就不再介绍
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");
//根据父目录路径和子目录或文件路径创建一个新 File 实例
System.out.println(file1);
//输出为D:\Program_Files\Java\jdk1.8.0_131
File file2 = new File(new File("D:\\Program_Files\\Java"),"jdk1.8.0_131");
根据父目录路径File实例和子目录或文件路径创建一个新 File 实例
System.out.println(file2);
//输出为D:\Program_Files\Java\jdk1.8.0_131,与上一个方法结果一样
}
}
区别在于第一个方法参数就是一段完整路径,而第二种方法参数为File对象与路径,第三种方法的参数是截断开的路径
-
File类常用方法
•String getName():返回此对象表示的文件或目录最后一级文件夹名称
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");
System.out.println(file1.getName());
}
}
这个方法返回的必然是路径中的最后一段
,输出为
•String getParent():返回此File对象的父目录路径名;如果此路径名没有指定父目录,则返回 null
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");
System.out.println(file1.getParent());
}
}
与getName方法恰恰相反,这个方法返回的是完整路径中除了最后一段外的部分,因为相对于最后一段路径对应的文件或目录,之前的路径所指向的就是其父目录。
输出为
•File getParentFile():返回File对象所在的父目录File实例;如果File对象没有父目录,则返回 null
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");
System.out.println(file1.getParentFile());
}
}
与getParent方法又有所不同,这个方法返回的并不是一个String类型的路径名,而是一个File实例。
返回值可调用方法,证明了该方法的返回的是实例。
输出为
·String getPath() :返回File对象所表示的字符串路径
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\Program_Files\\Java\\jdk1.8.0_131");
System.out.println(file1.getPath());
}
}
输出的即对象所指向的完整路径,相当于getParent+getName
输出为
•boolean renameTo(File dest):重新命名此File对象表示的文件,重命名成功返回true,否则返回false。
值得注意的是该方法在调用的时候需要创建一个新的对象来赋新文件名,且该方法只可用于重命名文件,不可用于目录。
•boolean mkdir():创建此File类对象指定的目录,不包含父目录。创建成功回true,否则返回false;
import java.io.File;
public class Test{
public static void main(String[] args) {
if(new File("D:\\LearnFile").mkdir()) {
System.out.println("yes");
}
}
}
执行后
值得注意的是,mkdir方法不可以创建路径中的父目录,即路径中除了最后一级外,有原本不存在的目录,方法会执行失败
(在D盘中并不存在StudyFile文件夹的情况下想要直接创建该文件夹及其中的目录)
而另一个方法可以解决这个问题
•boolean mkdirs():创建此File对象指定的目录,包括所有必需但不存在的父目录,创建成功返回true;否则返回false。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。
import java.io.File;
public class Test{
public static void main(String[] args) {
if(new File("D:\\StudyFile\\study").mkdirs()) {//换用mkdirs方法
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
执行成功
•boolean createNewFile():如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false;如果所创建文件所在目录不存在则创建失败并出现IOException异常。
•注意:mkdir()和mkdirs()只能创建目录,不能创建文件;而createNewFile()只能创建文件,不能创建目录;
•boolean exists():判断文件或目录是否存在
调用的file对象指向的路径为目录,则判断的为目录,反之为文件。
•boolean delete():删除File类对象表示的目录或文件。如果该对象表示一个目录,则该目录必须为空才能删除;文件或目录删除成功返回true,否则false。
首先我们有两个文件夹
这个目录下还有子目录
这个目录下为空
import java.io.File;
public class Test{
public static void main(String[] args) {
File file1 = new File("D:\\LearnFile");
if(file1.delete()) {
System.out.println("yes");
}else {
System.out.println("no");
}
File file2 = new File("D:\\StudyFile");
f(file2.delete()) {
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
执行结果为
说明这个方法不能删除非空目录,由于其只能删除空目录与文件的特点,我们可以认为它只能删除路径中的最后一级
•boolean isDirectory():判断此File对象代表的路径表示是不是目录,只有File对象代表路径存在且是一个目录时才返回true,否则返回false。
•boolean isFile():判断此File对象代表的路径是否是一个标准文件,只有File对代表路径存在且是一个标准文件时才返回true,否则返回false。
•String[] list():返回由File对象对应目录所包含文件名或文件夹名组成的字符串数组。
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) {
String[] names = new File("D:\\Program_Files").list();
for (String name : names) {
System.out.println(name);
}
}
}
执行结果为
注意:这个方法返回的是String类型的字符串组成的数组
•File[] listFiles():返回由当前File对象对应目录所包含文件路径或文件夹路径组成的File类型的数组。
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) {
File[] files = new File("D:\\Program_Files").listFiles();
for (File file : files) {
System.out.println(file);
}
}
}
执行结果为
注意:这个方法返回的是路径所指向的file对象组成的数组
这两个方法的参数是目录,而不是文件,如果填入的参数路径为文件,会触发空指针异常(方法按照文件名寻找目录,最终未找到)
-
File类属性
•static separator:指定文件或目录路径时使用斜线或反斜线来写,但是考虑到跨平台,斜线反斜线最好使用File类的separator属性来表示:
这是由于Windows操作系统中路径里为“\”斜线,而Linux中为“/”反斜线,当java程序跨平台使用时可能会出异常,因此使用这个方式来自适应,以规避问题。
-
绝对路径与相对路径
•绝对路径:从盘符开始的路径。
•相对路径:从当前路径开始的路径。
./ 代表同级目录
../ 代表一级上级目录(间隔一个目录)
在cmd中返回上级目录的操作:
原目录
输入cd /d ../后 返回到上一级
其中 cd即change diretion 改变路径
/d 为强制改变的语句
../表明改变的位置