Java Io File文件操作基础教程

网友投稿 323 2022-08-01


目录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=1KBString[] 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

if (files[i].isDirectory()){

delDirectoryAndFileAll(files[i].getPath());

}

files[i].delete();

}

}

//将path也一起删除

delfile.delete();

return true;

}

读取指定目录下全部文件

//获取指定路径下所有文件

public static List getFiles(String path) {

List list = new ArrayList<>();

getFiles(path, list);

return list;

}

private static void getFiles(String path, List 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 folder_list=new ArrayList<>();//文件夹

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

//排序 规则

//文件夹 按照名称 排序 从短到长

private boolean dir_name=false;

//文件夹 按照大小 排序 从小到大

private boolean dir_size=false;

//文件夹创建时间 排序 从 最近到最远

private boolean dir_time=true;

//文件 按照名称 排序 从短到长

private boolean JrntJB 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 compahttp://re_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() - o22http://.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 getFolder_list() {

return folder_list;

}

public List 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 秒

if (files[i].isDirectory()){

delDirectoryAndFileAll(files[i].getPath());

}

files[i].delete();

}

}

//将path也一起删除

delfile.delete();

return true;

}

读取指定目录下全部文件

//获取指定路径下所有文件

public static List getFiles(String path) {

List list = new ArrayList<>();

getFiles(path, list);

return list;

}

private static void getFiles(String path, List 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 folder_list=new ArrayList<>();//文件夹

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

//排序 规则

//文件夹 按照名称 排序 从短到长

private boolean dir_name=false;

//文件夹 按照大小 排序 从小到大

private boolean dir_size=false;

//文件夹创建时间 排序 从 最近到最远

private boolean dir_time=true;

//文件 按照名称 排序 从短到长

private boolean JrntJB 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 compahttp://re_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() - o22http://.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 getFolder_list() {

return folder_list;

}

public List 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 秒


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合ES(springboot整合es常用查询)
下一篇:Java启动Tomcat的实现步骤(tomcat启动方式有几种)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~