随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

构造方法:

public File(String pathname);  // 文件的完整路径
public File(File parent, String child);  // 父路径和子路径

创建文件方法:

public boolean createNewFile() throws IOException
import java.io.File;

public class MAIN {
    public static void main(String[] args) throws Exception {
        File file = new File("D:\\mldn.txt");
        System.out.println(file.createNewFile());   // 创建文件,true表示创建成功,false表示文件已经存在创建失败
    }
}
第一次运行:

第二次运行:

判断文件存在:

public boolean exists();  // true 表示存在
import java.io.File;

public class MAIN {
    public static void main(String[] args) throws Exception {
        File file = new File("D:\\mldn.txt");
        if (file.exists()) { // 文件存在
            System.out.println("文件已存在");
        } else {    // 文件不存在
            file.createNewFile();
            System.out.println("文件已创建");   // 创建文件
        }
    }
}

删除文件:

public boolean delete();  // true表示删除成功
import java.io.File;

public class MAIN {
    public static void main(String[] args) throws Exception {
        File file = new File("D:\\mldn.txt");
        if (file.exists()) { // 文件存在
            file.delete();
            System.out.println("文件存在但是已删除");
        } else {    // 文件不存在
            file.createNewFile();
            System.out.println("文件已创建");   // 创建文件
        }
    }
}

在Windows做项目的开发,在Linux或Unix做项目的部署和发布,那么就需要考虑一个问题:

  不同系统的差异性,例如:

    Windows的分隔符是“ \ ”,而Linux的分隔符是“ / ”。

      那么为了解决这个问题,File类就提供了一个常量:public static final String separator;

使用(正常路径的编写)

        File file = new File("D:" + File.separator+"mldn.txt");

等同于Windows下:

        File file = new File("D:\\mldn.txt");

因为系统的版本不断更新,功能也在不断地加强,所以现在的路径分隔符一般都可以随意使用,比如在Windows下使用Linux的路径分隔符:

        File file = new File("D:/mldn.txt");

上面的符号使用不会出错。

 

但是还是建议使用File.separator。

 

注意事项:

- 在使用File类进行文件处理的时候的过程是:程序 → JVM → 操作系统函数 → 文件处理

 

 

    |- 所以在进行同一文件反复删除和创建的时候,有可能会出现延迟的问题,所以最好的方案就是文件不要重名。

- 在进行文件的创建的时候有一个重要的前提:文件的父路径必须首先存在。

  解决方法:

获取父路径:public String getParentFile();
创建目录:
    创建单级目录:public boolean mkdir();
    创建多级目录:public boolean mkdirs();
import java.io.File;

public class MAIN {
    public static void main(String[] args) throws Exception {
//        File file = new File("D:" + File.separator+"mldn.txt");
        File file = new File("D:" + File.separator + "TXT" + File.separator + "mldn.txt");
        if (!file.getParentFile().exists()){    // 父目录不存在
            file.getParentFile().mkdirs();  // 创建父路径
        }
        if (file.exists()) { // 文件存在
            file.delete();
            System.out.println("文件存在但是已删除");
        } else {    // 文件不存在
            file.createNewFile();
            System.out.println("文件已创建");   // 创建文件
        }
    }
}

父目录的判断会提升程序的时间复杂度,所以为了提升这一点点的性能尽量保证目录事先已经创建,就不用进行这一步的判断。

 

读取文件信息:

最后一次修改时间:public long lastModified();
文件是否可读:public boolean canRead();
文件是否可写:public boolean canWrite();
获取文件长度:public long length();  // 返回的是long类型数据(long 用来定义时间日期和文件大小),返回的是字节长度
判断是否是文件:public boolean isFile();
判断是否是目录:public boolean isDirectory(); 
列出目录中所有的内容:public File[] listFiles()

 

import java.io.File;
import java.text.DateFormat;
import java.util.Arrays;
import java.util.Date;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "TXT" + File.separator + "mldn.txt");
        System.out.println("文件是否可读:" + file.canRead());
        System.out.println("文件是否可写:" + file.canWrite());
        System.out.println("获取文件长度:" + file.length());
        System.out.println("最后一次修改时间:" + new Date(file.lastModified()));
        System.out.println("判断是否是目录: " + file.isDirectory());
        System.out.println("判断是否是文件: " + file.isFile());
        File file1 = new File("D:" + File.separator);
        if (file1.isDirectory()){   // 如果当前是一个目录
            File[] res = file1.listFiles();     // 保存目录下的内容为数组
            for (File re : res) {
                System.out.println(re);
            }
        }
    }
}


 

获取目录下所有内容:

import java.io.File;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator);    // 获取路径下的文件信息
        listDir(file);
    }

    public static void listDir(File file) {
        if (file.isDirectory()) {    // 是一个目录
            File[] res = file.listFiles();  // 列出目录中的全部内容
            if (res != null) {
                for (File re : res) {
                    listDir(re);    // 继续判断
//                System.out.println(res[x]);
                }
            }
        }
        System.out.println(file);   // 获得一个完整的路径
//        file.delete();    // 谨慎操作,因为会删除获取到的所有路径下的文件,同样也可以设置路径来进行删除操作
    }
}

 

批量获取(或修改)文件名称:

面试考题

import java.io.File;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "TXT" + File.separator);
        long start = System.currentTimeMillis();
        renameDir(file);
        long end = System.currentTimeMillis();
        System.out.println("操作用时:" + (end - start));
    }
    public static void renameDir(File file){
        if (file.isDirectory()){    // 是一个目录
            File[] res = file.listFiles();  // 列出子目录的内容
            if (res != null){
                for (File re : res) {
                    renameDir(re);  // 递归获取文件信息
                }
            }
        }else {
            if (file.isFile()){ // 是文件,进行重命名
//                System.out.println(file);
                String filename = null;
                if (file.getName().contains(".")){  // 找到名称中有 . 的文件
                    filename = file.getName().substring(0,file.getName().lastIndexOf(".")) + ".txt";  // getName()方法返回的是此路径名称中的最后路径名称,然后再用lastIndexOf()方法找到最后的" . "的索引值,再进行截取(此时只有文件名称),最后加上新的后缀 .txt
                }else {  // 文件名称没有 " . "
                    filename= file.getName() + ".txt";  // 直接加上后缀
                }
                File newFile = new File(file.getParentFile(),filename); // 使用父路径和子路径的构造方法创建新的文件
                file.renameTo(newFile);     // 重命名
                System.out.println(newFile);
            }
        }
    }
}
修改前:
修改后:

 

posted on 2022-02-14 10:40  时间完全不够用啊  阅读(88)  评论(0编辑  收藏  举报