Java IO API中的FIle类可以让你访问底层文件系统,通过File类,你可以做到以下几点:
请注意: File只能访问文件以及文件系统的元数据。如果你想读写文件内容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。
路径问题:
注意:
\
/
。\
,而Java程序中的\
表示转义字符,所以在java中需要使用\\
或者直接使用File.separator
常量值表示。方法 | 简介 |
---|---|
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()));
}
获取根目录 (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
列: 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目录
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()); //排序规则了: 创建时间 排序 从 最近到最远
}
}
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 秒
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/124574877
内容来源于网络,如有侵权,请联系作者删除!