Java?Io?File文件操作基礎教程
File 類概述
Java IO API中的FIle類可以讓你訪問底層文件系統(tǒng),通過File類,你可以做到以下幾點:
- 檢測文件是否存在
- 讀取文件長度
- 重命名或移動文件
- 刪除文件
- 檢測某個路徑是文件還是目錄
- 讀取目錄中的文件列表
請注意: File只能訪問文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。
路徑問題:
- 絕對路徑:從盤符開始的路徑,這是一個完整的路徑。如:E:\a.txt
- 相對路徑:相當于項目目錄的路徑,這個一個便捷的路徑。如:…/a.txt
注意:
- 路徑不區(qū)分大小寫
- 路徑中的文件名稱分隔符 window 使用反斜杠\
- 其他的平臺都使用斜杠作為分隔符/。
- window 的路徑分隔符使用\,而Java程序中的\表示轉義字符,所以在java中需要使用\\或者直接使用File.separator常量值表示。
File對象文件操作
| 方法 | 簡介 |
|---|---|
| boolean exists() | 判斷文件和目錄是否存在 |
| boolean isFile() | 判斷是否是文件 |
| boolean isDirectory() | 判斷是否是目錄 |
| String getPath() | 返回當前路徑 |
| String getAbsolutePath() | 返回此對象的絕對路徑 |
| String getName | 返回文件名稱 |
| String getParent() | 返回路徑的上一個層路徑 |
| long length | 返回文件的長度,單位為 字節(jié)1024=1KB |
| String[] list(); | 查看當前目錄下第一層的所有文件和文件夾名稱 ,字符串數(shù)組 |
| File[] listFile(); | 返回當前目錄下第一層所有文件和文件夾的File數(shù)組對象 |
| CreateNewFile() | 創(chuàng)建文件, |
| mkdir() | 創(chuàng)建目錄只能創(chuàng)建一層 |
| mkdirs() | 創(chuàng)建多層目錄 |
| delete() | 刪除文件或者文件夾 刪除的文件夾必須是空的一次只能刪除一層 |
| lastModified() | 獲取文件最后創(chuàng)建時間 |
| 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()+"字節(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();
獲取當前環(huán)境的路徑符號
String separator = File.separator;
創(chuàng)建臨時文件,并返回臨時文件的FIle對象,
在window系統(tǒng)中臨時文件目錄: C:\Windows\Temp
在linux系統(tǒng)中臨時文件目錄: /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") (會變化的)常用功能
創(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("新建目錄操作出錯");
e.printStackTrace();
}創(chuàng)建文件
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;
}獲取當前時間和文件創(chuàng)建時間差
/**
*計算 當前時間和 文件創(chuàng)建時間 差
* @param file 傳入的文件
* @param num 1.選擇時間差毫秒 2.選擇時間差天數(shù)
* @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<>();//文件
//排序 規(guī)則
//文件夾 按照名稱 排序 從短到長
private boolean dir_name=false;
//文件夾 按照大小 排序 從小到大
private boolean dir_size=false;
//文件夾創(chuàng)建時間 排序 從 最近到最遠
private boolean dir_time=true;
//文件 按照名稱 排序 從短到長
private boolean file_name=false;
//文件 按照大小 排序 從小到大
private boolean file_size=false;
//文件創(chuàng)建時間 排序 從 最近到最遠
private boolean file_time=true;
//可以同時多開 排序規(guī)則 不會沖突
// 是否判 包括子文件
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) {
//然后文件夾創(chuàng)建時間 排序 從近到遠
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)建時間
* @param file_name 文件名稱排序
* @param file_size 文件大小
* @param file_time 文件創(chuàng)建時間
*/
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ī)則進行排序
public static void main(String[] args) {
Dir_File_List list=new Dir_File_List();
String path = "C:\\Users\\12841\\Desktop\\Docker";
//如何 排序 自己根據(jù)構造來 修改
boolean px=false; //開啟排序
list.dir_file_list(path,px);
System.out.println("所有的文件夾" + list.getFolder_list()); //排序規(guī)則: 創(chuàng)建時間 排序 從 最近到最遠
System.out.println("所有的文件" + list.getFile_list()); //排序規(guī)則了: 創(chuàng)建時間 排序 從 最近到最遠
}
}文件隨機名稱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隨機數(shù)
StringBuilder time=new StringBuilder();
time.append(num1+"-");//隨機數(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));//時
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隨機數(shù)
time.append(num);//隨機數(shù)
return time.toString();
}
類似于這種格式 : 833-2020mR6pK7sN17zT54zE56aH-229 2020年 6月 7日 17點 54 分 56 秒
到此這篇關于Java Io File文件操作的文章就介紹到這了,更多相關Java Io File操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java?-jar啟動參數(shù)設置file.encoding編碼,解決中文亂碼的問題
這篇文章主要介紹了java?-jar啟動參數(shù)設置file.encoding編碼,解決中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot如何使用MyBatis-Plus實現(xiàn)高效的數(shù)據(jù)訪問層
在開發(fā) Spring Boot 應用時,數(shù)據(jù)訪問是不可或缺的部分,本文將詳細介紹如何在 Spring Boot 中使用 MyBatis-Plus,并結合具體代碼示例來講解它的使用方法和常見配置,希望對大家有一定的幫助2025-04-04
使用mybatis的@Interceptor實現(xiàn)攔截sql的方法詳解
攔截器是一種基于 AOP(面向切面編程)的技術,它可以在目標對象的方法執(zhí)行前后插入自定義的邏輯,本文給大家介紹了使用mybatis的@Interceptor實現(xiàn)攔截sql的方法,需要的朋友可以參考下2024-03-03
Spring?Boot中的max-http-header-size配置方式
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

