在JAVA中,获取文件属性以及删除、重命名文件等工作由File类来完成。
类加载
import java.io.File;
一个File类实例表示一个目录/文件,但是需要注意,创建一个File实例并不会在机器上创建一个文件,无论文件是否存在,都可以创建任意文件名的file实例,可以调用exists()方法来判断文件是否存在。
File类包含许多获取文件属性、删除文件等方法,但是,File类不属于流对象,不能读写文件内容 ,但是可以作为参数传递给流对象的构造方法。为了完成I/O操作,需要使用JAVA I/O类创建对象来完成。
File类路径path的写法
* path以'/'或者'\\'开头的,是以项目所在的硬盘路径为基础路径
* path以字母开头的,是以项目的路径为基础路径,即:System.getProperty("user.dir")
* 以绝对路径做为路径
最好用“/”。因为JAVA是跨平台的。“\”(在JAVA代码里应该是“\\”)是Windows环境下的路径分隔符,Linux和Unix下都是用“/”,而在Windows下也能识别“/”,所以最好用“/”。
File类构造方法
· File(String pathname)该构造方法通过将给定路径名字字符串类型的路径(路径可以是目录的绝对地址,也可以是相对地址,更可以是文件,下同,都称之为路径)转换为抽象路径来创建一个新File实例
· File(String parent, String child)该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File实例
File file = new File("D:/myword","word.txt");
· File(File parent, String child)该构造方法根据parent抽象路径名和child路径名字符串创建一个新File实例
File类的创建方法
以下方法,若目标路径在创建前已存在,则均会返回false,创建成功返回true
boolean createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false
File file = new File("D:\\TEST.txt"); System.out.print(file.createNewFile());
* 注意也只能创建文件,并不能创建目录,即只要给定的路径中包含不存在的文件夹,就会创建失败
boolean mkdir()创建文件夹
File file = new File("D:\\TEST\\"); System.out.print(file.mkdir());
* 注意只能创建一级目录,若给定的路径中包含多级目录,则创建失败
boolean mkdirs()创建多级目录
* 注意即便最后创建失败,但是也可能创建了一些中间目录
* 注意上面两个方法如果要创建的目录已经存在,不再重新创建,都返回false,只有新建目录返回true
File类的删除方法
boolean delete()删除指定目录或者文件,成功返回true
* 删除文件或者一个空文件夹,不能删除非空文件夹
File file = new File("D:\\TEST\\"); System.out.print(file.delete());
void deleteOnExit()JVM退出前删除,用于删除临时文件,无返回值, 即使发生异常也不受影响
File类的判断方法
boolean exists()判断构造方法中封装的目录或者文件是否存在
boolean isAbsolute()判断构造方法中封装的路径(目录或文件)是不是绝对路径,是返回真;即使该路径不存在也可以进行判断
boolean isDirectory()判断是不是目录,若是返回true,若不是或不存在,则为false
boolean isFile()判断是不是文件,若是返回true,若不是或不存在,则为false
* 注意上面两个方法需要先判断路径是否存在,如果路径不存在,则返回false,即不存在的File类对象既不是文件也不是目录
boolean isHidden()判断封装的路径(目录或文件)是不是隐藏属性是返回true
boolean canExcute()测试应用程序是否可以执行此抽象路径名表示的文件;若不存在,则为false
File类的获取方法
String getName()获取封装路径(目录或文件)最后部分的名字
* 此方法不会判断路径是否存在,使用之前最好判断,如果是文件的话当然获取到的也就是文件的名字了
String getParent() 返回封装路径的父路径
* 注意封装的是相对路径时如果相对路径没有父路径,就会出错
File getParentFile()返回封装路径的父路径的File对象
String getAbsolutePath() 返回封装路径的绝对路径,与路径是否存在没关系
File getAbsoluteFile() 返回封装路径的绝对路径的File对象
long length()获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L
File类的其他方法
renameTo(File dest)重命名由此抽象路径名表示的文件
* 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名
* 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切(若给定的路径中的文件夹不存在,则失败)
* renameTo方法用于对物理文件名称进行修改,但是并不会修改File对象的name属性
File file = new File("D:\\happy.txt"); System.out.print(file.getName()); System.out.print(file.renameTo(new File("D:\\TEST.txt"))); System.out.print(file.getName());
File类的目录操作
static File[] listRoots()静态的方法,列出系统所有的根目录,光驱和移动设备存储也会算进去
File[] roots = File.listRoots(); for(File f: roots){ System.out.println(f); }
String[] list()返回File构造方法封装的路径下的所有文件和目录名,包含隐藏文件
* 对于文件这样操作会返回null
File dir = new File("C:\\"); String[] files = dir.list(); for(String s: files){ System.out.println(s); }
File[] listFiles()返回File构造方法封装的路径下的所有文件和目录名,返回File对象,带全路径。
* 注意返回为空和返回为null的意义是不同的
若不包含(符合条件的)文件,返回为空
但是如果返回为null,则表明调用方法的File对象可能不是一个目录,或者发生了IO错误
File类的常见应用
递归列出指定目录下的文件或文件夹,包含子目录中的内容
import java.io.File; public class Test { public static void main(String[] args){ listAll("D:\\迅雷下载"); } public static void listAll(String path) { File dir = new File(path); if(dir.exists()) { if(dir.isDirectory()) { File[] files = dir.listFiles(); for(File s: files){ if(s.isDirectory()) { System.out.println(s.getAbsolutePath()); listAll(s.getAbsolutePath()); } else System.out.println(s.getAbsolutePath()); } } else if(dir.isFile()) System.out.println(dir.getAbsolutePath()); } else System.out.println("The path doesn't exist!"); } }
删除非空文件夹
import java.io.File; public class Test { public static void main(String[] args){ deleteAll("D:\\TEST"); } public static void deleteAll(String path) { File dir = new File(path); if(dir.exists()) { if(dir.isDirectory()) { File[] files = dir.listFiles(); for(File s: files) deleteAll(s.getAbsolutePath()); } dir.delete(); } else System.out.println("The Path doesn't Exist!"); } }