java基础——File类

File类的静态成员变量

1、static String pathSeparator           与系统有关的路径分隔符,为了方便,它被表示为一个字符串。(Windows 下默认为 ‘ ; ’ )

2、static char pathSeparatorChar     与系统有关的路径分隔符。 

3、static String separator                  与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 (Windows 下默认为 ' \ ')

4、static char separatorChar            与系统有关的默认名称分隔符。

File类包含在 java.io.File 中。由于 java 语言跨平台的特性,如果固定文件路径的形式那么 Windows 和 Linux 之间就会因为路径格式不同而导致错误。所以使用上述变量就可以避免这些问题。比如在 Widows 中,文件的路径使用反斜杠 \,而在Linux 中,文件路径使用正斜杠 /。

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        
        String s1 = File.pathSeparator;
        System.out.println(s1);//打印结果为  ;  在linux中是 :
        
        String s2 = File.separator;
        System.out.println(s2);//打印结果为  \   如果是Linux系统则为 /
    }
}

File类的构造方法

 java API中的方法

  1. boolean canExecute(),测试应用程序是否可以执行此抽象路径名表示的文件。
  2. boolean canRead(),测试应用程序是否可以读取此抽象路径名表示的文件。
  3. boolean canWrite(),测试应用程序是否可以修改此抽象路径名表示的文件。
  4. int compareTo(File pathname)按字母顺序比较两个抽象路径名。
  5. boolean createNewFile(),当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
  6. static File createTempFile(String prefix, String suffix),在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
  7. static File createTempFile(String prefix, String suffix, File directory),在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
  8. boolean delete(),删除此抽象路径名表示的文件或目录。//注意:这个删除,不走回收站,直接删除,所以要小心使用。
  9. void deleteOnExit(),在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
  10. boolean equals(Object obj),测试此抽象路径名与给定对象是否相等。
  11. boolean exists(),测试此抽象路径名表示的文件或目录是否存在。
  12. File getAbsoluteFile(),返回此抽象路径名的绝对路径名形式。
  13. String getAbsolutePath(),返回此抽象路径名的绝对路径名字符串。
  14. File getCanonicalFile(),返回此抽象路径名的规范形式。
  15. String getCanonicalPath(),返回此抽象路径名的规范路径名字符串。
  16. long getFreeSpace(),返回此抽象路径名指定的分区中未分配的字节数。
  17. String getName(),返回由此抽象路径名表示的文件或目录的名称。
  18. String getParent(),返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
  19. File getParentFile(),返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
  20. String getPath(),将此抽象路径名转换为一个路径名字符串。
  21. long getTotalSpace(),返回此抽象路径名指定的分区大小。
  22. long getUsableSpace(),返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
  23. int hashCode(),计算此抽象路径名的哈希码。
  24. boolean isAbsolute(),测试此抽象路径名是否为绝对路径名。
  25. boolean isDirectory(),测试此抽象路径名表示的文件是否是一个目录。
  26. boolean isFile(),测试此抽象路径名表示的文件是否是一个标准文件。
  27. boolean isHidden(),测试此抽象路径名指定的文件是否是一个隐藏文件。
  28. long lastModified(),返回此抽象路径名表示的文件最后一次被修改的时间。
  29. long length(),返回由此抽象路径名表示的文件的长度(字节数)。
  30. String[] list(),返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。//遍历目录返回的只有名字
  31. String[] list(FilenameFilter filter),返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  32. File[] listFiles(),返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。//返回路径全名  推荐
  33. File[] listFiles(FileFilter filter),返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  34. File[] listFiles(FilenameFilter filter),返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  35. static File[] listRoots(),列出可用的文件系统根。
  36. boolean mkdir(),创建此抽象路径名指定的目录。调用该方法时,File对象必须对应一个路径,而不是文件//只能创建一个目录
  37. boolean mkdirs(),创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。//即可创建一个目录,也可创建多及目录,推荐
  38. boolean renameTo(File dest),重新命名此抽象路径名表示的文件。
  39. boolean setExecutable(boolean executable),设置此抽象路径名所有者执行权限的一个便捷方法。
  40. boolean setExecutable(boolean executable, boolean ownerOnly),设置此抽象路径名的所有者或所有用户的执行权限。
  41. boolean setLastModified(long time),设置此抽象路径名指定的文件或目录的最后一次修改时间。
  42. boolean setReadable(boolean readable),设置此抽象路径名所有者读权限的一个便捷方法。
  43. boolean setReadable(boolean readable, boolean ownerOnly),设置此抽象路径名的所有者或所有用户的读权限。
  44. boolean setReadOnly(),标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
  45. boolean setWritable(boolean writable),设置此抽象路径名所有者写权限的一个便捷方法。
  46. boolean setWritable(boolean writable, boolean ownerOnly),设置此抽象路径名的所有者或所有用户的写权限。
  47. String toString(),返回此抽象路径名的路径名字符串。
  48. URI toURI(),构造一个表示此抽象路径名的 file: URI。
  49. URL toURL(),已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。

用于创建和删除的方法

import java.io.File;
import java.io.IOException;

public class FileTest {
    public static void main(String[] args) throws IOException {
        
        File file = new File("D:\\1233\\javaFile\\myFile\\Test.java");
        
        
        //需要注意的是在各个创建操作中, 前面的路径必须是实际存在的,如果不存在就会报IOException, 比如myFile这个文件夹必须已经存在
        boolean b1 = file.createNewFile();    //创建文件, 如果文件已存在就返回false, 否则创建文件且返回true, 之前的路径必须实际存在
        
        boolean b2 = file.mkdir();     //创建单级目录, 目录已存在就返回false, 否则创建目录并返回true, 前面的路径必须已经存在
        
        boolean b3 = file.mkdirs();    //可以创建多级目录, 目录已存在就返回false, 否则创建目录并返回true, 前面的路径不需要存在, 会自动创建
        
        //delete方法删除的文件会直接从硬盘删除, 不会放进回收站, 使用需谨慎
        boolean b4 = file.delete();       //如果文件或目录已存在就进行删除并返回true, 否则返回false
 
    }
} 

用于获取的方法

1、String getAbsolutePath(),返回此抽象路径名的绝对路径名字符串。

2、File getAbsoluteFile(),返回 File 对象,此对象的路径名是绝对路径的形式。

3、String getPath(),将此抽象路径名转换为一个路径名字符串,File 对象的 toString() 就是调用此方法。

4、String getName(),返回由此抽象路径名表示的文件或目录的名称(路径的结尾部分)。

5、long length(),返回由此抽象路径名表示的文件的长度(字节数)。

import java.io.File;

public class FileTest {
    public static void main(String[] args) {
        
        //创建文件对象
        File file = new File("Test.java");//创建文件对象,将其封装成file类对象,就可以调用file类的方法了
        
        String path = file.getPath();//File对象中封装的路径是什么获取到的就是什么。
        
        String absPath1 = file.getAbsolutePath();//获取文件的绝对路径,即全路径,返回的是String对象
        File absPath2 = file.getAbsoluteFile();//返回File对象,该对象的路径是绝对路径的形式
        
        String filename = file.getName();//获取文件名称
        
        long size = file.length();//获取文件路径的字节数大小,如果该路径不存在就返回0
        
        System.out.println(path);      // Test.java
        
        System.out.println(absPath1);  // D:\javaFile\myFile\Test.java
        
        System.out.println(absPath2);  // D:\javaFile\myFile\Test.java
        
        System.out.println(absPath2.getPath());    // D:\javaFile\myFile\Test.java
        
        System.out.println(filename);  // Test.java
        
        System.out.println("size="+size);    // 0 (该路径不存在就返回0)
    }
}

用于判断的方法

import java.io.File;

public class FileTest {
    public static void main(String[] args) {
        
        //创建文件对象
        File file = new File("Test.java");//创建文件对象,将其封装成file类对象,就可以调用file类的方法了
        
        //注意, 如果File对象表示的路径不是实际存在的, 那么以下所有方法的返回值均为false
        
        boolean flag1 = file.exists();    //判断File表示的文件或目录是否实际存在, 即判断通过构造方法创建的 File 对象的路径是否存在
        
        boolean b1 = file.isDirectory();  //判断该File对象表示的是否是一个文件夹
        
        boolean b2 = file.isFile();            //判断该File对象表示的是否是一个文件
    }
}

遍历文件或目录的方法

import java.io.File;
import java.io.IOException;

public class FileTest {
    public static void main(String[] args) throws IOException {
        
        File file = new File("D:\\java");
        
        String []f1 = file.list(); //用于遍历文件夹,包括隐藏文件夹(不能遍历文件), 返回的是字符串数组, 如果路径不存在或者遍历的是文件就会报NullPointerException
        
        File []f2 = file.listFiles();  //遍历目录且将每个文件封装成File对象, 并返回一个File对象数组, 注意事项同上

    }
} 

文件过滤器(FileFilter)

在File类中,listFile()方法有两个重载的方法,接收FileFilter类型的参数。FileFilter 是 java.io 包下的一个接口,该接口没有实现类,有一个accept()方法。通过重写accept()方法并将实现类作为参数传到listFile()方法中,从而得到我们需要的文件或目录。

 

 工作原理:

1、使用listFile()时,会遍历一个目录,目录下的每个文件或目录都会被封装成一个 File 对象。

2、如果使用了 FileFilter 类型的参数,那么就会把第一步中的每个 File 对象传递给 FileFilter 的实现类,并调用实现类中 accept() 方法。

3、如果 accept() 方法返回的是 true,那么就会把该File对象加入到 listFile() 返回的 File 对象数组中,如果为 false 则不会加入到数组。

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

//FileFilter的实现类, 重写accept(),返回我们需要的内容
class FileFilterImpl implements FileFilter{

    @Override
    public boolean accept(File pathname) {
        // TODO Auto-generated method stub
        return pathname.isDirectory(); //获取路径下所有的文件夹
    }
    
}

public class FileTest {
    public static void main(String[] args) throws IOException {
        
        File file = new File("D:\\java");
               
        File []f2 = file.listFiles(new FileFilterImpl());  //过滤后只会显现路径下所有的文件夹

    }
} 

参考资料

Java中的File类

posted @ 2020-07-19 15:32  路半_知风  阅读(272)  评论(0编辑  收藏  举报