Java-Io-File文件操作

x33g5p2x  于2022-05-05 转载在 Java  
字(9.5k)|赞(0)|评价(0)|浏览(418)

File 类概述

Java IO API中的FIle类可以让你访问底层文件系统,通过File类,你可以做到以下几点:

  • 检测文件是否存在
  • 读取文件长度
  • 重命名或移动文件
  • 删除文件
  • 检测某个路径是文件还是目录
  • 读取目录中的文件列表

请注意: File只能访问文件以及文件系统的元数据。如果你想读写文件内容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。

路径问题:

  1. 绝对路径:从盘符开始的路径,这是一个完整的路径。如:E:\a.txt
  2. 相对路径:相当于项目目录的路径,这个一个便捷的路径。如:…/a.txt

注意:

  1. 路径不区分大小写
  2. 路径中的文件名称分隔符 window 使用反斜杠\
  3. 其他的平台都使用斜杠作为分隔符/
  4. window 的路径分隔符使用\,而Java程序中的\表示转义字符,所以在java中需要使用\\或者直接使用File.separator常量值表示。

File对象文件操作

方法简介
boolean exists()判断文件和目录是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
String getPath()返回当前路径
String getAbsolutePath()返回此对象的绝对路径
String getName返回文件名称
String getParent()返回路径的上一个层路径
long length返回文件的长度,单位为 字节1024=1KB
String[] list();查看当前目录下第一层的所有文件和文件夹名称 ,字符串数组
File[] listFile();返回当前目录下第一层所有文件和文件夹的File数组对象
CreateNewFile()创建文件,
mkdir()创建目录只能创建一层
mkdirs()创建多层目录
delete()删除文件或者文件夹 删除的文件夹必须是空的一次只能删除一层
lastModified()获取文件最后创建时间
canRead()获取文件是否可读
canWrite()获取文件是否可写
oldFile.renameTo(new File( newFileName));修改文件或者目录名称
file.setWritable(false);设置文件为只读

演示代码

File f=new File("path");
if (f.exists()) {
    System.out.println(f.getName() + "的属性如下: 文件长度为:" + f.length()+"字节");
    System.out.println(f.isFile() ? "是文件" : "不是文件");
    System.out.println(f.isDirectory() ? "是目录" : "不是目录");
    System.out.println(f.canRead() ? "可读取" : "不");
    System.out.println(f.isHidden() ? "是隐藏文件" : "不是隐藏文件");
    System.out.println("文件夹的最后修改日期为:" + new Date(f.lastModified()));
}

File静态方法

获取根目录 (linux就只有/)

File[] files = File.listRoots();

获取当前环境的路径符号

String separator = File.separator;

创建临时文件,并返回临时文件的FIle对象,

在window系统中临时文件目录: C:\Windows\Temp
在linux系统中临时文件目录: /tmp 或/var/tmp

File test = File.createTempFile("test", ".tmp");

获取各种路径

在操作文件的时候难免会遇到,获取文件路径的问题下面提供几种获取文件路径的办法不同的架构获取的方式也不同

路径整合

将多个路径整合Paths.get() 自动适配路径符

String pat1="C:\\Users\\";
String pat="/aaaa/aaa/a";
String string = Paths.get(pat1, pat).toString();
System.out.println(string);//C:\Users\aaaa\aaa\a

获取classpath路径 (常用)

列: E:\porject\java-utils\common-utils\target\[test-classes或classes] 而classes目录等于resources目录

方案1:

String path = Paths.get(ResourceUtils.getURL("classpath:").getPath().substring(1)).toString();
      System.out.println(path);

      URL resource = Class.class.getResource("/");
      String path1 = Paths.get(resource.getPath().substring(1)).toString();
      System.out.println(path1);

获取Tomcat的bin目录

在不在服务器中 那么就是当前项目的根路径
如果在服务器那么就是Tomcat中bin目录

System.getProperty("user.dir") (会变化的)

常用功能

创建目录

mkdir():只能创建一层目录. mkdirs(): 可以创建多层目录

File myFolderPath = new File("pathdir");
try {
    if (!myFolderPath.exists()) {
        myFolderPath.mkdir();
    }
}
catch (Exception e) {
    System.out.println("新建目录操作出错");
    e.printStackTrace();
}

创建文件

File myFilePath = new File("path_file");
try {
    if (!myFilePath.exists()) {
        myFilePath.createNewFile();
    }
}
catch (Exception e) {
    System.out.println("新建文件操作出错");
    e.printStackTrace();
}

判断文件或文件夹是否存在

都是使用 exists()
比如文件是否存在: c:xxxx/xx/a.txt
比如目录是否存在: c:xxxx/xx/

File str1 = new File("path");
if (str1.exists()) {
    System.out.println("存在");
}

判断是文件还是文件夹

File str1=new File("path");
    if(str1.isFile()){
        System.out.println("是文件");
    }
    if(str1.isDirectory()){
        System.out.println("是目录");
    }

判断是否是绝对路径

public  static boolean isAbsolute( String file){
      File file1=new File(file);
      return file1.isAbsolute();
  }

判断是否是隐藏文件

也就是是文件名是.开头的 或者是手动将文件设置为隐藏文件

那么他就是隐藏文件

public static boolean isHidden( String file){
      File file1=new File(file);
      return file1.isHidden();
  }

删除文件或者整个文件夹

包括文件夹下的子文件夹以及文件全部删除

public  static boolean delDirectoryAndFileAll(String path){
        File delfile = new File(path);
        if (!delfile.exists()) {
            System.out.println("要删除的文件或目录不存在");
            return false;
        }
        File[] files=delfile.listFiles();
        if (files!=null){
            int length = files.length;
            for(int i=0;i<length;i++){
                if (files[i].isDirectory()){
                    delDirectoryAndFileAll(files[i].getPath());
                }
                files[i].delete();
            }
        }

        //将path也一起删除
        delfile.delete();
        return true;
    }

读取指定目录下全部文件

//获取指定路径下所有文件
    public static List<String> getFiles(String path) {
        List<String> list = new ArrayList<>();
        getFiles(path, list);
        return list;
    }

    private static void getFiles(String path, List<String> list) {
        File file = new File(path);
        if (!file.exists()) {
            System.out.println("文件目录不存在");
            return;
        }
        //获取当前目录文件集合
        File[] files = file.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {//判断是否是目录
                getFiles(files[i].getPath(),list);
            } else {
                list.add(files[i].getAbsolutePath());
            }

        }
    }

提取文件后缀

不加点比如 txt js png

public static String   suffix( String file){
      File str1=new File(file);
		//提取扩展名
      String str2=str1.getPath().substring(str1.getPath().lastIndexOf(".")+1);
       return str2;
  }

获取当前时间和文件创建时间差

/**
     *计算 当前时间和 文件创建时间 差
     * @param file  传入的文件
     * @param num   1.选择时间差毫秒  2.选择时间差天数
     * @return  返回时间差
     */
public long dateFile(String file,int num){
        File file1=new File(file);
    long nd = 1000 * 24 * 60 * 60;
    long  diff=new Date().getTime() - new Date(file1.lastModified()).getTime();
    switch (num){
        case 1:
            // 获得两个时间的毫秒时间差异
            return  diff;
        case 2:
            return diff / nd;
        default:
            return  diff;
    }
}

    @Test
    public  void show()  {
        String path="文件";
        long l = dateFile(path, 2);
        System.out.println(l);
    }

文件和文件夹进行按需排序

package org.app.test;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
//缺点就是不能直接对 盘符进行 扫描 比如C:\\  或者F:\\       只能针对某个文件夹
public class Dir_File_List {

    private List<File>   folder_list=new ArrayList<>();//文件夹
    private List<File> file_list=new ArrayList<>();//文件

    //排序  规则
    //文件夹 按照名称 排序 从短到长
    private   boolean dir_name=false;
    //文件夹 按照大小 排序 从小到大
    private  boolean dir_size=false;
    //文件夹创建时间  排序  从 最近到最远
    private  boolean dir_time=true;

    //文件 按照名称  排序 从短到长
    private  boolean  file_name=false;
    //文件 按照大小  排序 从小到大
    private   boolean file_size=false;
    //文件创建时间  排序  从 最近到最远
    private  boolean file_time=true;

    //可以同时多开 排序规则  不会冲突

    
    // 是否判 包括子文件
    Boolean  pddirZi=true;



    public  void  pathFile(String path){
        File file=new File(path);
        if (!file.exists()){
            System.out.println("找不到路径");
            return;
        }
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isDirectory()){
                folder_list.add(file1);
                if(pddirZi){
                    pathFile(file1.getPath());
                }

            }
            if (file1.isFile()){
                file_list.add(file1);
            }
        }

    }

    public  void  compare_lis() {
        if (dir_name) {
            //文件夹按文件名称的长度 显示的顺序:  从短到 长
            Collections.sort(folder_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (o11.getName().length() - o22.getName().length());
                }

            });

        }

        if (file_name) {
            //按文件名称的长度 显示的顺序:  从短到 长
            Collections.sort(file_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (o11.getName().length() - o22.getName().length());
                }

            });

        }

        if (dir_size) {
            //按照文件夹大小 再次排序  最大的文件 放在最后
            Collections.sort(folder_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (int) (o11.length() - o22.length());
                }
            });
        }

        if (file_size) {
            //按照文件大小 再次排序  最大的文件 放在最后
            Collections.sort(file_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (int) (o11.length() - o22.length());
                }
            });
        }
        if (dir_time) {
            //然后文件夹创建时间 排序 从近到远
            Collections.sort(folder_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (int) ( o22.lastModified()-o11.lastModified());
                }
            });
        }

        if(file_time){
            //然后文件大小 再次排序  最大的文件 放在最后
            Collections.sort(file_list, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    File o11 = (File) o1;
                    File o22 = (File) o2;
                    return (int) ( o22.lastModified()-o11.lastModified());
                }
            });
        }



    }

    public void dir_file_list(String path,boolean px){
        pathFile(path);
        if (px){
            compare_lis();//排序
        }
    }

    public List<File> getFolder_list() {
        return folder_list;
    }
    public List<File> getFile_list() {
        return file_list;
    }

    public Dir_File_List() {
    }

    /**
     *
     * @param dir_name   文件夹名称排序
     * @param dir_size   文件夹大小
     * @param dir_time  文件夹创建时间
     * @param file_name  文件名称排序
     * @param file_size  文件大小
     * @param file_time   文件创建时间
     */
    public Dir_File_List(boolean dir_name, boolean dir_size, boolean dir_time, boolean file_name, boolean file_size, boolean file_time) {
        this.dir_name = dir_name;
        this.dir_size = dir_size;
        this.dir_time = dir_time;
        this.file_name = file_name;
        this.file_size = file_size;
        this.file_time = file_time;
    }

    //查看C盘中指定路径下所有的文件和文件夹名称,并且指定排序规则进行排序
    public static void main(String[] args) {
        Dir_File_List list=new Dir_File_List();
        String path = "C:\\Users\\12841\\Desktop\\Docker";
        //如何 排序 自己根据构造来 修改
        boolean px=false; //开启排序
        list.dir_file_list(path,px);
        System.out.println("所有的文件夹" + list.getFolder_list()); //排序规则:  创建时间  排序  从 最近到最远
        System.out.println("所有的文件" + list.getFile_list()); //排序规则了:   创建时间  排序  从 最近到最远

    }
}

文件随机名称28-34位

public static String Name_tuP(){
    char[] ch={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char[] Ch={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    Calendar cal = Calendar.getInstance();
    Random sun=new Random();

    int num1=sun.nextInt(1000);//0-1000随机数
    StringBuilder time=new StringBuilder();
    time.append(num1+"-");//随机数
    time.append(cal.get(Calendar.YEAR)); //年
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]);
    time.append(cal.get(Calendar.MONTH) + 1);//月
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]);
    time.append(cal.get(Calendar.DAY_OF_MONTH));//日
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]);
    time.append(cal.get(Calendar.HOUR_OF_DAY));//时
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]);
    time.append(cal.get(Calendar.MINUTE));//分
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]);
    time.append(cal.get(Calendar.SECOND));//秒
    time.append(ch[sun.nextInt(ch.length)]);
    time.append(Ch[sun.nextInt(ch.length)]+"-");
    int num=sun.nextInt(1000);//0-1000随机数
    time.append(num);//随机数
    return time.toString();
}

类似于这种格式 : 833-2020mR6pK7sN17zT54zE56aH-229 2020年 6月 7日 17点 54 分 56 秒

点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^

相关文章