Java?Io?File文件操作基礎(chǔ)教程
File 類概述
Java IO API中的FIle類可以讓你訪問(wèn)底層文件系統(tǒng),通過(guò)File類,你可以做到以下幾點(diǎn):
- 檢測(cè)文件是否存在
- 讀取文件長(zhǎng)度
- 重命名或移動(dòng)文件
- 刪除文件
- 檢測(cè)某個(gè)路徑是文件還是目錄
- 讀取目錄中的文件列表
請(qǐng)注意: File只能訪問(wèn)文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。
路徑問(wèn)題:
- 絕對(duì)路徑:從盤符開始的路徑,這是一個(gè)完整的路徑。如:E:\a.txt
- 相對(duì)路徑:相當(dāng)于項(xiàng)目目錄的路徑,這個(gè)一個(gè)便捷的路徑。如:…/a.txt
注意:
- 路徑不區(qū)分大小寫
- 路徑中的文件名稱分隔符 window 使用反斜杠\
- 其他的平臺(tái)都使用斜杠作為分隔符/。
- window 的路徑分隔符使用\,而Java程序中的\表示轉(zhuǎn)義字符,所以在java中需要使用\\或者直接使用File.separator常量值表示。
File對(duì)象文件操作
| 方法 | 簡(jiǎn)介 |
|---|---|
| boolean exists() | 判斷文件和目錄是否存在 |
| boolean isFile() | 判斷是否是文件 |
| boolean isDirectory() | 判斷是否是目錄 |
| String getPath() | 返回當(dāng)前路徑 |
| String getAbsolutePath() | 返回此對(duì)象的絕對(duì)路徑 |
| String getName | 返回文件名稱 |
| String getParent() | 返回路徑的上一個(gè)層路徑 |
| long length | 返回文件的長(zhǎng)度,單位為 字節(jié)1024=1KB |
| String[] list(); | 查看當(dāng)前目錄下第一層的所有文件和文件夾名稱 ,字符串?dāng)?shù)組 |
| File[] listFile(); | 返回當(dāng)前目錄下第一層所有文件和文件夾的File數(shù)組對(duì)象 |
| CreateNewFile() | 創(chuàng)建文件, |
| mkdir() | 創(chuàng)建目錄只能創(chuàng)建一層 |
| mkdirs() | 創(chuàng)建多層目錄 |
| delete() | 刪除文件或者文件夾 刪除的文件夾必須是空的一次只能刪除一層 |
| lastModified() | 獲取文件最后創(chuàng)建時(shí)間 |
| canRead() | 獲取文件是否可讀 |
| canWrite() | 獲取文件是否可寫 |
| oldFile.renameTo(new File( newFileName)); | 修改文件或者目錄名稱 |
| file.setWritable(false); | 設(shè)置文件為只讀 |
演示代碼
File f=new File("path");
if (f.exists()) {
System.out.println(f.getName() + "的屬性如下: 文件長(zhǎng)度為:" + f.length()+"字節(jié)");
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靜態(tài)方法
獲取根目錄 (linux就只有
/)
File[] files = File.listRoots();
獲取當(dāng)前環(huán)境的路徑符號(hào)
String separator = File.separator;
創(chuàng)建臨時(shí)文件,并返回臨時(shí)文件的FIle對(duì)象,
在window系統(tǒng)中臨時(shí)文件目錄: C:\Windows\Temp
在linux系統(tǒng)中臨時(shí)文件目錄: /tmp 或/var/tmp
File test = File.createTempFile("test", ".tmp");獲取各種路徑
在操作文件的時(shí)候難免會(huì)遇到,獲取文件路徑的問(wèn)題下面提供幾種獲取文件路徑的辦法不同的架構(gòu)獲取的方式也不同
路徑整合
將多個(gè)路徑整合Paths.get() 自動(dòng)適配路徑符
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目錄
在不在服務(wù)器中 那么就是當(dāng)前項(xiàng)目的根路徑
如果在服務(wù)器那么就是Tomcat中bin目錄
System.getProperty("user.dir") (會(huì)變化的)常用功能
創(chuàng)建目錄
mkdir():只能創(chuàng)建一層目錄. mkdirs(): 可以創(chuàng)建多層目錄
File myFolderPath = new File("pathdir");
try {
if (!myFolderPath.exists()) {
myFolderPath.mkdir();
}
}
catch (Exception e) {
System.out.println("新建目錄操作出錯(cuò)");
e.printStackTrace();
}創(chuàng)建文件
File myFilePath = new File("path_file");
try {
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
}
catch (Exception e) {
System.out.println("新建文件操作出錯(cuò)");
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("是目錄");
}判斷是否是絕對(duì)路徑
public static boolean isAbsolute( String file){
File file1=new File(file);
return file1.isAbsolute();
}判斷是否是隱藏文件
也就是是文件名是.開頭的 或者是手動(dòng)將文件設(shè)置為隱藏文件
那么他就是隱藏文件
public static boolean isHidden( String file){
File file1=new File(file);
return file1.isHidden();
}刪除文件或者整個(gè)文件夾
包括文件夾下的子文件夾以及文件全部刪除
public static boolean delDirectoryAndFileAll(String path){
File delfile = new File(path);
if (!delfile.exists()) {
System.out.println("要?jiǎng)h除的文件或目錄不存在");
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;
}
//獲取當(dāng)前目錄文件集合
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());
}
}
}提取文件后綴
不加點(diǎn)比如 txt js png
public static String suffix( String file){
File str1=new File(file);
//提取擴(kuò)展名
String str2=str1.getPath().substring(str1.getPath().lastIndexOf(".")+1);
return str2;
}獲取當(dāng)前時(shí)間和文件創(chuàng)建時(shí)間差
/**
*計(jì)算 當(dāng)前時(shí)間和 文件創(chuàng)建時(shí)間 差
* @param file 傳入的文件
* @param num 1.選擇時(shí)間差毫秒 2.選擇時(shí)間差天數(shù)
* @return 返回時(shí)間差
*/
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:
// 獲得兩個(gè)時(shí)間的毫秒時(shí)間差異
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);
}文件和文件夾進(jìn)行按需排序
package org.app.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
//缺點(diǎn)就是不能直接對(duì) 盤符進(jìn)行 掃描 比如C:\\ 或者F:\\ 只能針對(duì)某個(gè)文件夾
public class Dir_File_List {
private List<File> folder_list=new ArrayList<>();//文件夾
private List<File> file_list=new ArrayList<>();//文件
//排序 規(guī)則
//文件夾 按照名稱 排序 從短到長(zhǎng)
private boolean dir_name=false;
//文件夾 按照大小 排序 從小到大
private boolean dir_size=false;
//文件夾創(chuàng)建時(shí)間 排序 從 最近到最遠(yuǎn)
private boolean dir_time=true;
//文件 按照名稱 排序 從短到長(zhǎng)
private boolean file_name=false;
//文件 按照大小 排序 從小到大
private boolean file_size=false;
//文件創(chuàng)建時(shí)間 排序 從 最近到最遠(yuǎn)
private boolean file_time=true;
//可以同時(shí)多開 排序規(guī)則 不會(huì)沖突
// 是否判 包括子文件
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) {
//文件夾按文件名稱的長(zhǎng)度 顯示的順序: 從短到 長(zhǎng)
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) {
//按文件名稱的長(zhǎng)度 顯示的順序: 從短到 長(zhǎng)
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) {
//然后文件夾創(chuàng)建時(shí)間 排序 從近到遠(yuǎn)
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 文件夾創(chuàng)建時(shí)間
* @param file_name 文件名稱排序
* @param file_size 文件大小
* @param file_time 文件創(chuàng)建時(shí)間
*/
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盤中指定路徑下所有的文件和文件夾名稱,并且指定排序規(guī)則進(jìn)行排序
public static void main(String[] args) {
Dir_File_List list=new Dir_File_List();
String path = "C:\\Users\\12841\\Desktop\\Docker";
//如何 排序 自己根據(jù)構(gòu)造來(lái) 修改
boolean px=false; //開啟排序
list.dir_file_list(path,px);
System.out.println("所有的文件夾" + list.getFolder_list()); //排序規(guī)則: 創(chuàng)建時(shí)間 排序 從 最近到最遠(yuǎn)
System.out.println("所有的文件" + list.getFile_list()); //排序規(guī)則了: 創(chuàng)建時(shí)間 排序 從 最近到最遠(yuǎn)
}
}文件隨機(jī)名稱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隨機(jī)數(shù)
StringBuilder time=new StringBuilder();
time.append(num1+"-");//隨機(jī)數(shù)
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));//時(shí)
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隨機(jī)數(shù)
time.append(num);//隨機(jī)數(shù)
return time.toString();
}
類似于這種格式 : 833-2020mR6pK7sN17zT54zE56aH-229 2020年 6月 7日 17點(diǎn) 54 分 56 秒
到此這篇關(guān)于Java Io File文件操作的文章就介紹到這了,更多相關(guān)Java Io File操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決在SpringBoot中使用@Value取不到值的問(wèn)題
這篇文章主要給大家分享解決在SpringBoot中使用@Value取不到值的問(wèn)題,文中有詳細(xì)的解決代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09
java中isEmpty和isBlank的區(qū)別小結(jié)
Java中的isEmpty和isBlank都是用來(lái)判斷字符串是否為空的方法,但在不同的情況下有所區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
java?-jar啟動(dòng)參數(shù)設(shè)置file.encoding編碼,解決中文亂碼的問(wèn)題
這篇文章主要介紹了java?-jar啟動(dòng)參數(shù)設(shè)置file.encoding編碼,解決中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
mybatis-plus 擴(kuò)展批量新增的實(shí)現(xiàn)
本文主要介紹了mybatis-plus 擴(kuò)展批量新增的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
SpringBoot如何使用MyBatis-Plus實(shí)現(xiàn)高效的數(shù)據(jù)訪問(wèn)層
在開發(fā) Spring Boot 應(yīng)用時(shí),數(shù)據(jù)訪問(wèn)是不可或缺的部分,本文將詳細(xì)介紹如何在 Spring Boot 中使用 MyBatis-Plus,并結(jié)合具體代碼示例來(lái)講解它的使用方法和常見(jiàn)配置,希望對(duì)大家有一定的幫助2025-04-04
使用mybatis的@Interceptor實(shí)現(xiàn)攔截sql的方法詳解
攔截器是一種基于 AOP(面向切面編程)的技術(shù),它可以在目標(biāo)對(duì)象的方法執(zhí)行前后插入自定義的邏輯,本文給大家介紹了使用mybatis的@Interceptor實(shí)現(xiàn)攔截sql的方法,需要的朋友可以參考下2024-03-03
Springboot實(shí)現(xiàn)獲取實(shí)時(shí)天氣
這篇文章主要為大家詳細(xì)介紹了如何使用Springboot實(shí)現(xiàn)獲取實(shí)時(shí)天氣功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
Spring?Boot中的max-http-header-size配置方式
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09

