Java IO —— File的详解

File类用来表示文件或者目录,可以获取或者操作文件的相关属性(文件名、文件大小、文件权限等),但是File类不能读取(或者写入)文件内容。

 

文件分隔符:不同的操作系统,文件的分隔符也不一样,有的是'/',有的是‘\’或者‘\\’,但是写程序的时候不能把所有情况都写上,所以我们使用File.separator就能解决这个问题,File.separator会根据系统的情况,选择相应的文件分隔符。本篇文章为了方便阅读,未使用File.separator,直接使用普通字符串

 

 

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);
    }
}

1
2、创建方法

  • boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,创建一个新的空文件。

  • boolean mkdir() 创建此抽象路径名指定的目录。

  • boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

   public static void main(String[] args) throws IOException {
       File file = new File("E:\\testSpace\\io");
        System.out.println("文件夹创建结果:" + file.mkdir());

       File file2 = new File(file, "test01.txt");
        System.out.println("文件创建结果:" + file2.createNewFile());


       File file3 = new File("E:\\testSpace\\io", "direct01\\direct01_01");
        System.out.println("文件夹创建结果:" + file3.mkdirs());

    }

运行结果:

3、删除方法

  • boolean delete() 删除此抽象路径名表示的文件或目录(如果是删除文件夹则只能删除空文件夹)。

  • void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

    public static void main(String[] args) throws IOException {

        // 删除文件
       File file2 = new File("E:\\testSpace\\io", "test01.txt");
        System.out.println("文件删除结果:" + file2.delete());  // 删除成功

        // 删除文件夹
       File file3 = new File("E:\\testSpace\\io", "direct01\\direct01_01");
        System.out.println("文件夹删除结果:" + file3.delete());  // 删除成功

    }

4、修改方法

对文件或者文件夹的名称进行修改

  • boolean renameTo(File dest) 重新命名此抽象路径名表示的文件,renameTo 可以重命名文件,也可以进行文件的移动操作!

下面的示例中,不仅修改了文件名,文件的位置也发生的移动,移动到了当前程序的文件夹下,但是文件内容没有发生改变。

    public static void main(String[] args) throws IOException {

        // 创建文件()
        File file2 = new File("E:\\testSpace\\io\\direct01", "test01.txt");
        System.out.println(file2.exists());
        File file3 = new File("test02.txt");

        System.out.println("文件名修改结果:" +file2.renameTo(file3));
        
    }

修改权限

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());
    }

6

5、判断方法

 

boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。

boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。

boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。

boolean exists() 测试此抽象路径名表示的文件或目录是否存在。


boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。

boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。

boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。

boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
 

    public static void main(String[] args) throws IOException {

        File file3 = new File("test02.txt");

        System.out.println("文件名是否可以执行:" + file3.canExecute());
        System.out.println("文件名是否可以读取:" + file3.canRead());
        System.out.println("文件名是否可以写入:" + file3.canWrite());
        System.out.println("文件是否存在:" + file3.exists());

        System.out.println("路径名是否为绝对路径名:" + file3.isAbsolute());
        System.out.println("文件是否为目录:" + file3.isDirectory());
        System.out.println("文件是否为普通文件:" + file3.isFile());
        System.out.println("文件是否为隐藏文件:" + file3.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 main(String[] args) throws IOException {

        File file3 = new File("test02.txt");

        System.out.println("文件名的名称是:" + file3.getName());
        System.out.println("文件的路径:" + file3.getPath());
        System.out.println("文件的绝对路径:" + file3.getAbsolutePath());
        System.out.println("获取父目录路径字符串(没有返回null):" + file3.getParent());
        System.out.println("获取父目录:" + file3.getParentFile());


    }

 

7、搜索文件

  • String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

  • File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

    public static void main(String[] args) throws IOException {

        File file3 = new File("E:\\testSpace");
        String[] fileNames = file3.list();
       for(String fileName : fileNames){
           System.out.println(fileName);
       }
        System.out.println("-----------");
       File[] files = file3.listFiles();
       for(File file : files){
           if(file.isFile()){
               System.out.println("文件" + file.getName() + "是一个文件");
           } else {
               System.out.println("文件" + file.getName() + "是一个文件夹");
           }
       }


    }

8、过滤文件

  • String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  • File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  • File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
    public static void main(String[] args) throws IOException {

        File file3 = new File("E:\\testSpace");
        FileFilter fileFilter = new FileFilter() {
            /**
             * 实现accept()方法
             */
            @Override
            public boolean accept(File pathname) {
                // 过滤所有普通文件
                if(pathname.isFile()){
                    return true;
                }
                return false;
            }
        };


       File[] files = file3.listFiles(fileFilter);
       for(File file : files){
           if(file.isFile()){
               System.out.println("文件" + file.getName() + "是一个文件");
           } else {
               System.out.println("文件" + file.getName() + "是一个文件夹");
           }
       }


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值