File类
Java中所有的目录都被当成File 对待,它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。
在线API文档
File类封装了一些对文件操作的常用方法
1、构造方法
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
/**
* File类的构造函数
* @author LingDu
*
*/
public class DemoFile {
public static void main(String[] args) {
//File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File f1 =new File("src/test.txt");
//File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File f2 =new File(f1,"test.txt");
//File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File f3 =new File("src","test.txt");
//跨平台的路径
//separator方法会自动获取不同平台的分隔符
File f4 =new File(File.separator + "src");
//win 下是 '\'
//linux 下是 '/'
System.out.println(f4);
}
}
2、创建方法
boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
boolean mkdir() 创建此抽象路径名指定的目录。
boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
/**
* 新建一个文件
*/
public static void test1(){
File file = new File("newFile.txt");
try {
System.out.println("创建文件:" + file.createNewFile());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 新建一个文件夹
*/
public static void test2(){
File file = new File("newDir");
System.out.println("创建文件夹:" + file.mkdir());
}
/**
* 新建一个多级文件夹
*/
public static void test3(){
File file = new File("newDir/1/2/3");
System.out.println("创建多级文件夹:" + file.mkdirs());
}
3、删除方法
boolean delete() 删除此抽象路径名表示的文件或目录。
void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
/**
* 删除文件
*/
public static void test4(){
File file = new File("newFile.txt");
System.out.println("删除文件:" + file.delete());
}
/**
* 删除文件夹
*/
public static void test5(){
File file = new File("newDir");
//删除文件跟删除文件夹的方法是一样的
//这个方法只能删除空文件夹
System.out.println("删除文件夹:" + file.delete());
}
4、修改方法
重命名文件/文件夹
- boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
/**
* 重命名一个文件/文件夹
* 将newFile.txt改成File.txt
*/
public static void test6(){
File file = new File("newFile.txt");
System.out.println("重命名文件:" + file.renameTo(new File("File.txt")));
}
修改权限
boolean setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。
boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的执行权限。
boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。
boolean setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。
boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。
boolean setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
boolean setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。
boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。
/**
* 修改文件/文件夹的权限
*
* file.setExecutable(executable) 修改文件是否可执行的方法 有问题 win下不可改
*/
public static void test8(){
File file = new File("File.txt");
System.out.println("文件修改前的属性:--------------------");
System.out.println("查看文件是否可读:" + file.canRead());
System.out.println("查看文件是否可写:" + file.canWrite());
System.out.println("查看文件是否可执行:" + file.canExecute());
//修改为 不可读、不可写、不可执行
file.setReadable(false);
file.setWritable(false);
file.setExecutable(false);
System.out.println("文件修改后的属性:--------------------");
System.out.println("查看文件是否可读:" + file.canRead());
System.out.println("查看文件是否可写:" + file.canWrite());
System.out.println("查看文件是否可执行:" + file.canExecute());
}
5、判断方法
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
/**
* 判断文件的方法
*/
public static void test7() {
File file = new File("File.txt");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("文件是否可执行:" + file.canExecute());
System.out.println("文件是否存在:" + file.exists());
System.out.println("路径名是否为绝对路径名:" + file.isAbsolute());
System.out.println("文件是否是一个目录:" + file.isDirectory());
System.out.println("文件是否是一个标准文件:" + file.isFile());
System.out.println("文件是否是一个隐藏文件:" + file.isHidden());
}
6、获取方法
File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。
long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
String getPath() 将此抽象路径名转换为一个路径名字符串。
long getTotalSpace() 返回此抽象路径名指定的分区大小。
long getUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。
static File[] listRoots() 列出可用的文件系统根。
/**
* 常用获取方法
*/
public static void test9() {
File file = new File("File.txt");
System.out.println("文件名:" + file.getName());
System.out.println("路径名:" + file.getPath());
System.out.println("绝对路径:" + file.getAbsolutePath());
System.out.println("获取父目录路径字符串(没有返回null):" + file.getParent());
System.out.println("最后一次修改时间:" + file.lastModified());
}
7、搜索文件
String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
在src下创建一个newDir文件夹,然后放入不同类型的文件进行测试
public static void test10(){
File file = new File("newDir");
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
String str = files[i].getName();
if (files[i].isFile()) {
System.out.println(files[i] + "---是一个文件");
}else {
System.out.println(files[i] + "---是一个文件夹");
}
}
}
8、过滤文件
String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
/**
* 用系统提供的方法过滤文件
*/
public static void test11(){
File file = new File("newDir");
File files[] = file.listFiles(new FileFilter() {
/**
* 实现accept()方法
*/
@Override
public boolean accept(File pathname) {
//过滤所有txt结尾的文件
if (pathname.getName().endsWith("txt")) {
return true;
}
return false;
}
});
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
}