File类(java.io.File)
File类:是文件和目录路径名的抽象表示。
1、File类的构造方法:
(1)、public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File
实例。 如果给定 的字符串是空字符串,则结果是空的抽象路径名。其中pathname是路径名字符串
(2)、public File(String parent, String child):从父路径名字符串和子路径名字符串创建新的File
实例。其中parent是父 路 径名字符串,child是子路径名字符串
(3)、public File(File parent, String child):从父抽象路径名和子路径名字符串创建新的File
实例。其中parent是父路径 名字符串,child是子路径名字符串
(4)、public File(URI uri):通过将给定的file: URI转换为抽象路径名来创建新的File实例。
2、File类常用的方法:
public boolean exists():测试当前对象所指的文件或目录是否存在,若存在,则返回true,否则返回false;
public boolean isDirectory():测试当前对象是否为目录,若当前对象是目录,则返回true,否则返回false;
public boolean isFile():测试当前对象是否为文件,若当前对象是文件,则返回true,否则返回false;
public boolean delete():删除当前对象所指的文件(目录只能删空目录),若删除成功,则返回true,否则返回false;
public boolean mkdir():在当前对象指定的路径上创建一个目录;
public boolean mkdirs():在当前对象指定的路径上创建目录及子目录,不包括子文件;
public boolean renameTo(File dest):重命名由此抽象路径名表示的文件,将文件名改为dest;
public long length():返回由此抽象路径名表示的文件的长度;
public File[] listFiles():返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件及目录,不包括子文件;
public String[] list():返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录;
public boolean createNewFile():当且仅当文件不存在时,创建一个由该抽象路径名命名的新的空文件;
public String getName():返回由此抽象路径名表示的文件或目录的名称;
public long lastModified():返回文件最后修改的日期,以long型来表示;
public boolean canread():测试这个文件是否为可读;
public boolean canwrite():测试这个文件是否可写;
public boolean setReadOnly():将当前文件设为只读;
public String getPath():将此抽象路径名转换为路径名字符串,如果File生成对象时采用的是绝对路径,那么它返回绝 对路径,如果是相对路径,那么它返回相对路径;
public String getParent():返回此抽象路径名的父路径名;
public String getAbsolutePath():返回此抽象路径名的绝对路径名;
3、举例
(1)如果E:\work\IO目录下a.txt文件不存在,创建新文件,如果文件存在,则删除此文件
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
//建立程序和磁盘上文件的联系
File file = new File("E:\\work\\IO\\a.txt");
//如果文件不存在,创建新文件,如果文件存在,则删除此文件
if(!file.exists()) {
System.out.println("文件不存在,创建新文件");
file.createNewFile();
}else {
System.out.println("文件存在,删除此文件");
file.delete();
}
}
}
(2)创建E:\work\IO目录下a与b目录,a目录下再建子目录aa,b目录再建子目录bb
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
//建立程序和磁盘上文件的联系
File file1 = new File("E:\\work\\IO\\a\\aa");
File file2 = new File("E:\\work\\IO\\b");
if(!file1.exists() && !file2.exists()) {
file1.mkdirs();
file2.mkdirs();
}else {
System.out.println("不建子目录和子文件");
}
}
}
(3)、获取指定目录下(E:\codete)所有的文件及文件夹名称
import java.io.File;
public class FileTestName {
public static void main(String[] args) {
File file = new File("E:/codete");
//返回codete目录下所有的文件及文件夹
File[] files = file.listFiles();
for (File f: files) {
System.out.println(f.getName());
}
}
}
(4)将E:\codete目录下所有的图片文件按照最后修改的时间排序,并修改图片文件名,以1,2,3...顺序重新命名图片文件名
import java.io.File;
import java.util.Arrays;
public class FileTestDelete {
public static int n = 1;
public static void main(String[] args) {
File file = new File("E:\\codete");
if(file.isDirectory()) {
File[] files = file.listFiles();
//数组排序,按图片最后修改的时间排序
Arrays.sort(files, (f1,f2)-> Long.compare(f1.lastModified(), f2.lastModified()));
for (File f : files) {
//找到图片文件,toLowerCase()转成小写字母
if(f.getName().endsWith(".JPG")) {
//图片改名
f.renameTo(new File(f.getParent(),(n++)+".jpg"));
}
}
}
}
}
(4)获取E:\codete目录下所有的子文件及子文件目录名称,并且按照对应目录层级进行缩进显示
import java.io.File;
import java.util.Arrays;
public class GetFileName {
public static void printDir(File file,int hireachy) {
if(file.isFile()) {
printIndent(hireachy);
System.out.println("|-->" + file.getName());
}
else if(file.isDirectory()) {
printIndent(hireachy);
System.out.println("|-->" + file.getName());
//获取文件夹中所有的文件
File[] files = file.listFiles();
//遍历所有的文件
for (File f : files) {
printDir(f,hireachy+1); //递归调用
}
}
else {
System.out.println("既不是文件,也不是文件夹目录");
}
}
public static void printIndent(int hireachy) {
for(int i=0; i<hireachy; i++) {
System.out.print(" ");
}
}
public static void main(String[] args) {
File dir = new File("E:\\codete");
printDir(dir,0);
}
}