Java?Io?File文件操作基礎(chǔ)教程
File 類(lèi)概述
Java IO API中的FIle類(lèi)可以讓你訪問(wèn)底層文件系統(tǒng),通過(guò)File類(lèi),你可以做到以下幾點(diǎn):
- 檢測(cè)文件是否存在
- 讀取文件長(zhǎng)度
- 重命名或移動(dòng)文件
- 刪除文件
- 檢測(cè)某個(gè)路徑是文件還是目錄
- 讀取目錄中的文件列表
請(qǐng)注意: File只能訪問(wèn)文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫(xiě)文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。
路徑問(wèn)題:
- 絕對(duì)路徑:從盤(pán)符開(kāi)始的路徑,這是一個(gè)完整的路徑。如:E:\a.txt
- 相對(duì)路徑:相當(dāng)于項(xiàng)目目錄的路徑,這個(gè)一個(gè)便捷的路徑。如:…/a.txt
注意:
- 路徑不區(qū)分大小寫(xiě)
- 路徑中的文件名稱分隔符 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() | 獲取文件是否可寫(xiě) |
| 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();
}判斷是否是隱藏文件
也就是是文件名是.開(kāi)頭的 或者是手動(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ì) 盤(pán)符進(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í)多開(kāi) 排序規(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盤(pán)中指定路徑下所有的文件和文件夾名稱,并且指定排序規(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; //開(kāi)啟排序
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();
}
類(lèi)似于這種格式 : 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)文章
詳解java倒計(jì)時(shí)三種簡(jiǎn)單實(shí)現(xiàn)方式
這篇文章主要介紹了詳解java倒計(jì)時(shí)三種簡(jiǎn)單實(shí)現(xiàn)方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值
這篇文章主要介紹了SpringBoot 使用 @Value 注解讀取配置文件給靜態(tài)變量賦值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
HashSet工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
HashSet 底層采用 HashMap 來(lái)保存所有元素,因此 HashSet 的實(shí)現(xiàn)比較簡(jiǎn)單。接下來(lái)通過(guò)本文給大家介紹HashSet工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-04-04
Dependency ‘XXX:‘ not found問(wèn)題的三步解決
這篇文章主要介紹了Dependency ‘XXX:‘ not found問(wèn)題的三步解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring Cloud Hystrix 服務(wù)容錯(cuò)保護(hù)的原理實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Hystrix 服務(wù)容錯(cuò)保護(hù)的原理實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達(dá)式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07
Spring activiti如何實(shí)現(xiàn)指定任務(wù)處理者
這篇文章主要介紹了Spring activiti如何實(shí)現(xiàn)指定任務(wù)處理者,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
如何開(kāi)發(fā)一個(gè)簡(jiǎn)單的Akka Java應(yīng)用
這篇文章主要介紹了如何開(kāi)發(fā)一個(gè)簡(jiǎn)單的Akka Java應(yīng)用 ,幫助大家使用Java創(chuàng)建Akka項(xiàng)目并將其打包,感興趣的朋友可以了解下2020-10-10

