File(文件类)
尽管java.io定义的大多数类是实行流式操作的,File类不是。它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File 对待,它具有附加的属性——一个可以被 list( )方法检测的文件名列表。
1、File文件类的构造方法
public class DemoFile1 {
/**
* 创建file对象
* @param args
*/
public static void main(String[] args) {
//File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File file1 = new File("mmm/a.txt");
//File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File实例。
File file2 = new File(file1, "b.txt");
//File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File实例。
File file3 = new File("mmm", "c.txt");
//跨平台的路径
//separator方法会自动获取不同平台的分隔符
File file4 = new File(File.separator+"mmm");
System.out.println(file4);
}
}
2、创建方法
- boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
- boolean mkdir() 创建此抽象路径名指定的目录。
- boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
public class DemoFile2 {
/**
* 新建一个文件
*/
public static void test1(){
File file1 = new File("o.txt");
try {
System.out.println("创建文件" + file1.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 新建一个文件夹
*/
public static void test2(){
File file2 = new File("nnn");
System.out.println("创建一个文件夹"+file2.mkdirs());
}
/**
*多级创建文件夹
*/
public static void test3(){
File file2 = new File("nnn/qqq/aaa");
System.out.println("创建多级文件夹"+file2.mkdirs());
}
public static void main(String[] args) {
test1();
test2();
test3();
}
}
3、删除方法
- boolean delete() 删除此抽象路径名表示的文件或目录。
- void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
public class DemoFile3 {
/**
* 删除一个文件
*/
public static void test1() {
File file = new File("mmm/a.txt");
System.out.println(file.delete());
}
/**
* 删除一个文件夹
*/
public static void test2() {
File file = new File("nnn");
System.out.println(file.delete());
}
public static void main(String[] args) {
test1();
test2();
}
}
4、重命名
- boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
public class DemoFile4 {
/**
* 重命名文件
* 将mmm目录下的c.text文件名修改成c.txt
*/
public static void test1() {
File file = new File("mmm/c.text");
System.out.println("重命名文件"+ file.renameTo(new File("mmm/c.txt")));
}
public static void main(String[] args) {
test1();
}
}
5、查看权限
-
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
-
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
-
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
-
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
/**
*查看文件/文件夹权限
*查看文件权限与查看文件权限的方法一致
*/
public static void test1() {
File file = new File("mmm/c.txt");
System.out.println("是否有读取权限:" + file.canRead());
System.out.println("是否有修改权限:" + file.canWrite());
System.out.println("是否有执行权限:" + file.canExecute());
}
6、修改权限
-
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) 设置此抽象路径名的所有者或所有用户的写权限。
/**
* 修改文件/文件夹权限
*/
public static void test2() {
File file = new File("mmm/c.txt");
file.setReadable(false);
file.setWritable(false);
file.setExecutable(false);
System.out.println("是否有读取权限:" + file.canRead());
System.out.println("是否有修改权限:" + file.canWrite());
System.out.println("是否有执行权限:" + file.canExecute());
}
7、获取方法
-
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 test3() {
File file = new File("mmm/c.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());
}
8、搜索文件
-
String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
-
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
/**
*搜索文件根目录下的所有文件
*/
public static void test4() {
File file = new File("./");
String [] files = file.list();
//遍历mmm目录下的所有文件
for (int i = 0; i < files.length; i++) {
File temp = new File(files[i]);
//将mmm目录下的文件分类输出
if (temp.isDirectory()) {
System.out.println(files[i] + ",是一个文件夹");
}else {
System.out.println(files[i] + ",是一个文件");
}
}
}
9、过滤文件
-
String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
-
File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
-
File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
/**
* 使用系统提供的方法过滤文件
*/
public static void test5(){
File file = new File("./");
File files [] = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith("txt")) {
return true;
}
return false;
}
});
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
}