Java Io File文件操作基础教程

目录
  • File 类概述
  • File对象文件操作
  • File静态方法
  • 获取各种路径
    • 路径整合
    • 获取classpath路径 (常用)
    • 获取Tomcat的bin目录
  • 常用功能
    • 创建目录
    • 创建文件
    • 判断文件或文件夹是否存在
    • 判断是文件还是文件夹
    • 判断是否是绝对路径
    • 判断是否是隐藏文件
    • 删除文件或者整个文件夹

File 类概述

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

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

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

路径问题:

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

注意:

  • 路径不区分大小写
  • 路径中的文件名称分隔符 window 使用反斜杠\
  • 其他的平台都使用斜杠作为分隔符/。
  • 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 秒

到此这篇关于Java Io File文件操作的文章就介绍到这了,更多相关Java Io File操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Hadoop运行时遇到java.io.FileNotFoundException错误的解决方法

    报错信息: java.lang.Exception: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in localfetcher#1 at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) at org.apache.hadoop.mapred.LocalJobRunner$Jo

  • java.io.File的renameTo方法移动文件失败的解决方案

    今天线上发现一个问题,发现一个定时移动文件的业务没有正常执行,结合日志和代码发现,移动文件是使用File类的renameTo方法,但是方法返回的都是false,表示文件移动失败. 出现这个问题我第一反应是不是文件权限的问题,但是和运维研究后发现的确不是权限导致的.既然不是权限的问题,那就看看renameTo的实现吧,查看源码发现该方法最终是通过一个本地方法实现的,看不到咋写的. 网上查了一下renameTo这个方法,发现这个方法确实存在一些问题,就是在不同的文件系统中移动是不会成功的.因为测试环

  • 文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法

    新添加个发文类型 insert into mis.zyb_sf_type values('121','榆财法字','榆财法字',2,'0','1',21,NULL,'0','发文模板.doc','') 创建文章时出错了, 异常信息: 文件保存失败 Java.io.FileNotFoundException: E:\tomcat\jinzhongshi\jinzs_yuci\webapps\myDoJZS\word\template_fw\发文模版.doc (系统找不到指定的文件.) at jav

  • Java Io File文件操作基础教程

    目录 File 类概述 File对象文件操作 File静态方法 获取各种路径 路径整合 获取classpath路径 (常用) 获取Tomcat的bin目录 常用功能 创建目录 创建文件 判断文件或文件夹是否存在 判断是文件还是文件夹 判断是否是绝对路径 判断是否是隐藏文件 删除文件或者整个文件夹 File 类概述 Java IO API中的FIle类可以让你访问底层文件系统,通过File类,你可以做到以下几点: 检测文件是否存在 读取文件长度 重命名或移动文件 删除文件 检测某个路径是文件还是目

  • java io读取文件操作代码实例

    这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要分为字节读取和字符读取,字节读取可以一个一个读取和字节数组读取,字符读取同样之,字符读取适合文本读取,字节读取皆可以 这里直接上代码,读取文件的9个小demo package com.io; import org.junit.Test; import java.io.*; public class FileTest { //1.字节流字节一个

  • Java IO流 文件传输基础

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String s="好好学习ABC"; byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是

  • Java中File文件操作类的基础用法

    前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一下File类的用法. 话不多说了,来一起看看详细的介绍吧 1.基本概念 File:文件和目录路径名的抽象表示形式,代表文件或者文件夹. 2.构造方法 // 根据parent抽象路径名和child路径名字符串创建一个新File实例 File(File parent, String child) // 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例 File(String pathname) // 根据p

  • 基于java file 文件操作operate file of java的应用

    java文件操作 复制代码 代码如下: package com.b510; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.PrintWriter; /**  *   * @author Hongten</br>  *   *    

  • Java最全文件操作实例汇总

    本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 //import java.io.*; File myFolderPath = new File(%%1); try { if (!myFolderPath.exists()) { myFolderPath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } 2.创建文件 //i

  • Java RandomAccessFile基本文件操作示例

    本文实例讲述了Java RandomAccessFile基本文件操作.分享给大家供大家参考,具体如下: 一 简介 RandomAccessFile:java提供对文件内容的访问,既可以读文件,也可以写文件. RandomAccessFile支持随机访问文件,可以访问文件的任意位置 1.java文件模型 在硬盘上的文件是byte byte byte存储的,是数据的集合 2.打开文件 有两种模式"rw"(读写) "r"(只读) RandomAccessFile raf

  • java IO流文件的读写具体实例

    引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

  • Java IO读取文件的实例详解

    Java中文件流的两个主要方式就是字符流和字节流,如下图: 具体的使用方法可以参考官方文档,这里主要介绍四种常见的文件读取方式 1.通过字节来读取文件(常用于二进制文件:图片.声音.视频等) 2.通过字符来读取文件(常用于文本的读取) 3.通过行来读取文件(常用于面向行的格式化文本读取) 4.随机读取文件(基于字节来读取) 下面是对于这四种读取方式的代码,如下: package com.ds.io; //1.按字节读取文件内容 //2.按字符读取文件内容 //3.按行读取文件内容 //4.随机读

随机推荐