學習Java之File文件操作方法
一. File文件類
1. 概述
在計算機系統(tǒng)中,文件是非常重要的信息存儲方式。為了讓我們方便的操作文件,Java標準庫java.io包中給我們提供了一個非常重要的File文件類。該類是唯一代表磁盤文件本身的對象,它提供了訪問和操作文件及目錄的一系列方法。如果我們想在程序中操作文件和目錄,比如新建、刪除、寫入、重命名文件,以及創(chuàng)建、移動和刪除目錄等操作,都可以通過File類來完成。
在Java中,F(xiàn)ile對象既可以表示文件,也可以表示目錄。特別要注意的是,如果我們想構(gòu)造一個File對象,即使傳入的這個文件或目錄不存在,代碼也不會出錯。這是因為構(gòu)造一個File對象時,并不會有任何磁盤操作,只有當我們調(diào)用了File對象的某些方法時,才會真正地進行磁盤操作。
2. 構(gòu)造方法
Java的File類給我們提供了如下幾個構(gòu)造方法,用于創(chuàng)建一個File對象:
- File(String path):path表示路徑,如果path是真實存在的路徑,則該File對象表示的是一個目錄;如果path是文件名,則該File對象表示的是一個文件。
- File(String path, String name):path是路徑名,name是文件名。
- File(File dir, String name):dir是路徑對象,name是文件名。
我們使用上面的任意構(gòu)造方法,都可以創(chuàng)建出一個 File對象。創(chuàng)建出File對象后,我們就可以調(diào)用File對象的各種方法,對文件進行各種操作了。
3. 常用屬性
另外在File類中還有兩個很常用的靜態(tài)常量屬性,如下所示:
- public static final String pathSeparator:分隔符,用于分隔連續(xù)的多個路徑,在Windows中代表";"。
- public static final String separator:路徑分隔符,用來分隔同一個路徑字符串中的目錄,在Windows中代表"/"。
大家要注意,一般Windows的路徑分隔符是反斜線“\”,而Java程序中的反斜線卻表示轉(zhuǎn)義字符。但Java程序支持將斜線當成平臺無關(guān)的路徑分隔符,所以如果我們需要在Windows的路徑中使用路徑,可以使用兩條反斜線進行轉(zhuǎn)義,或直接使用正斜線“/”。比如我們在Windows系統(tǒng)中有一個文件:D:\java\HelloWorld.java,在Java代碼中,該路徑的可以寫成如下格式:
D:/java/HelloWorld.java 或 D:\java\HelloWorld.java。
4. 常用方法
為了方便進行文件操作,F(xiàn)ile類給我們提供了多個方法,用于獲取文件的屬性、信息以及文件操作。下面給大家介紹一些常用的方法:
4.1 獲取文件名和路徑
- getName():獲取文件名;
- getPath():獲取文件路徑;
- getAbsolutePath():獲取文件的絕對路徑;
- getParent():獲取文件的父路徑;
- getParentFile():獲取文件的父路徑的File對象。
4.2 獲取文件信息
- length():獲取文件的長度(以字節(jié)為單位);
- lastModified():獲取文件的最后修改時間,返回的是毫秒值;
- exists():判斷文件是否存在;
- isFile():判斷是否是文件;
- isDirectory():判斷是否是目錄;
- canRead():判斷文件是否可讀;
- canWrite():判斷文件是否可寫。
4.3 文件操作
- createNewFile():創(chuàng)建一個空文件,如果文件已經(jīng)存在,則不創(chuàng)建;
- delete():刪除文件或目錄,如果文件或目錄不存在,則返回false;
- mkdir():創(chuàng)建一個目錄,如果目錄已經(jīng)存在,則不創(chuàng)建;
- mkdirs():創(chuàng)建一個多級目錄,如果目錄已經(jīng)存在,則不創(chuàng)建;
- renameTo(File dest):將文件重命名為指定的文件名或路徑。
4.4 遍歷操作
- list():遍歷目錄中的文件,返回由File對象表示目錄中所有文件和子目錄名稱組成的字符串數(shù)組,如果調(diào)用的 File對象不是目錄,則返回null;
- list(FilenameFilter filter):返回文件數(shù)組中僅包含符合filter過濾器的文件和目錄,如果filter為 null,則接受所有的名稱。
接下來會通過一些案例來講解這些方法的具體使用。
5. 創(chuàng)建文件和目錄
如果我們想要使用File類來訪問文件系統(tǒng)中的文件和目錄,首先需要創(chuàng)建一個File對象。File類的構(gòu)造方法有多種方式,接下來就說說幾種常見的方式。
5.1 通過文件路徑創(chuàng)建File對象
可以使用文件的路徑創(chuàng)建一個File對象,例如:
File file = new File("F:/example/file.txt");
上面這行代碼將創(chuàng)建一個File對象,它代表文件系統(tǒng)中路徑為"F:/example/file.txt"的文件。但是大家要注意,F(xiàn)ile對象只是用來表示文件和目錄的路徑名,并不一定表示實際的文件和目錄。如果我們想操作實際的文件和目錄,必須使用File對象的相關(guān)方法來執(zhí)行操作。所以上面的這行代碼,并不會真的創(chuàng)建出對應的目錄和文件,我們需要通過mkdir()、mkdirs()和createNewFile()方法才能創(chuàng)建出對應的目錄和文件。
另外還請大家注意,即使該文件不存在,也不會報錯。而且該文件是一個空白的文件,如果我們想往該文件中添加內(nèi)容,需要利用IO流往里添加內(nèi)容。完整代碼如下:
public class Demo01 { public static void main(String[] args) { //使用分隔符常量,屏蔽不同系統(tǒng)的路徑符號差異 //String path="F:" + File.separator + "example" + File.separator + "file.txt"; //File file = new File(path); //path=F:\example\file.txt //System.out.println("path="+file.getPath()); //該行代碼只是創(chuàng)建出File對象,但并不會真的創(chuàng)建出對應的目錄和文件 File file = new File("F:/example/file.txt"); try { // 文件操作 if (!file.exists()) { //真正的創(chuàng)建文件 file.createNewFile(); System.out.println("文件創(chuàng)建成功!"); } else { System.out.println("文件已經(jīng)存在!"); } } catch (IOException e) { e.printStackTrace(); } } }
大家要注意,如果我們的代碼要運行在不同的操作系統(tǒng)中,路徑的分隔符是不一樣的,例如:
- Windows中使用反斜杠\表示目錄的分隔符;
- Linux中使用正斜杠/表示目錄的分隔符。
所以為了讓我們的程序具有更好的可移植性,可以在編寫路徑時根據(jù)程序所在的操作系統(tǒng),使用符合本地操作系統(tǒng)要求的分隔符,此時就可以使用File類提供的兩個分隔符常量。
5.2 通過父目錄和子文件名創(chuàng)建File對象
我們還可以使用父目錄和子文件名來創(chuàng)建一個File對象,例如:
File parentDir = new File("F:/example"); File file = new File(parentDir, "file.txt");
這行代碼會創(chuàng)建一個File對象,它代表文件系統(tǒng)中路徑為"F:/example/file.txt"的文件。如果父目錄不存在,會自動創(chuàng)建出來。
5.3 通過URI創(chuàng)建File對象
我們還可以使用URI(統(tǒng)一資源標識符)創(chuàng)建一個File對象,例如:
File file = new File(new URI("file:///F:/example/file.txt"));
該代碼會創(chuàng)建一個File對象,它代表文件系統(tǒng)中路徑為"F:/example/file.txt"的文件。請注意,如果我們使用的URI格式不正確,會拋出異常。
5.4 創(chuàng)建單個目錄
除了能創(chuàng)建文件,F(xiàn)ile類還提供了訪問和操作文件系統(tǒng)中目錄的方法。我們可以使用mkdir()方法創(chuàng)建單個目錄。例如,以下代碼會創(chuàng)建出一個名為"example"的目錄。
import java.io.File; public class Demo01 { public static void main(String[] args) { //該行代碼只是創(chuàng)建出File對象,但并不會真的創(chuàng)建出對應的目錄和文件 //File file = new File("F:/example/file.txt"); File dir = new File("F:/example"); if (!dir.exists()) {//判斷目錄是否存在 //如果目錄不存在,則創(chuàng)建出來 boolean success = dir.mkdir(); if (success) { System.out.println("目錄創(chuàng)建成功"); } else { System.out.println("目錄創(chuàng)建失敗"); } } } }
5.5 創(chuàng)建多級目錄
我們還可以使用mkdirs()方法來創(chuàng)建出一個多級目錄,如果目錄已經(jīng)存在,則不創(chuàng)建。
import java.io.File; public class Demo01 { public static void main(String[] args) { //創(chuàng)建多級目錄 File dirs = new File("F:\testDir\testSubDir"); if (dirs.mkdirs()) { System.out.println("多級目錄創(chuàng)建成功!"); } else { System.out.println("多級目錄已經(jīng)存在!"); } } }
6. 獲取文件信息
創(chuàng)建出File文件和目錄之后,接下來我們還可以獲取文件與目錄的相關(guān)信息,F(xiàn)ile類提供了多個方法用于獲取文件的屬性及信息,使用起來很方便,案例如下:
public class Demo03 { public static void main(String[] args) { //創(chuàng)建單級目錄 File file = new File("F:/example/file.txt"); // 獲取文件名和路徑 System.out.println("文件名:" + file.getName()); System.out.println("文件路徑:" + file.getPath()); System.out.println("文件絕對路徑:" + file.getAbsolutePath()); System.out.println("文件父路徑:" + file.getParent()); System.out.println("文件父路徑File對象:" + file.getParentFile()); // 獲取文件信息 System.out.println("文件長度:" + file.length()); System.out.println("最后修改時間:" + file.lastModified()); System.out.println("是否存在:" + file.exists()); System.out.println("是否是文件:" + file.isFile()); System.out.println("是否是目錄:" + file.isDirectory()); System.out.println("是否可讀:" + file.canRead()); System.out.println("是否可寫:" + file.canWrite()); } }
7. 重命名與移動文件
如果我們需要將一個文件重命名,或者是把文件從一個位置移動到另一個位置,可以使用renameTo()方法。
public class Demo04 { public static void main(String[] args) { File oldFile = new File("F:/example/newFile2.txt"); File newFile = new File("F:/example2/newFile22.txt"); if(oldFile.exists()) { //重命名文件。如果新文件所在的目錄與之前的文件不是同一目錄,則可以實現(xiàn)文件的移動,否則就是單純重命名 boolean result = oldFile.renameTo(newFile); if(result) { System.out.println("重命名成功"); }else { System.out.println("重命名失敗"); } } } }
大家要注意,如果新文件所在的目錄與之前的舊文件不在同一目錄,則會實現(xiàn)文件的移動,否則就是單純重命名。
8. 刪除文件和目錄
我們可以使用delete方法來刪除一個文件或目錄。
public class Demo05 { public static void main(String[] args) { File file = new File("F:/example/file.txt"); if(file.exists()) { boolean result = file.delete(); if(result) { System.out.println("刪除成功"); }else { System.out.println("刪除失敗"); } } } }
9. 遍歷文件
我們可以使用list()方法來遍歷一個目錄。假設我們想遍歷C盤根目錄下的所有文件和目錄,并顯示出文件或目錄名稱、類型及大小,則實現(xiàn)代碼如下:
public class Demo06 { public static void main(String[] args) { File file = new File("C:/"); // 調(diào)用不帶參數(shù)的list()方法 String fileList[] = file.list(); for (int i = 0; i < fileList.length; i++) { // 遍歷返回的字符數(shù)組 System.out.print(fileList[i] + "\t\t"); System.out.print((new File("F:/", fileList[i])).isFile() ? "文件" + "\t\t" : "文件夾" + "\t\t"); System.out.println((new File("F:/", fileList[i])).length() + "字節(jié)"); } } }
大家要注意,list()方法返回的數(shù)組中只包含文件名稱,但不包含路徑,也不保證所得數(shù)組中相同的字符串會以特定順序出現(xiàn),特別是不保證它們會按字母順序出現(xiàn)。
二. Path路徑類
1. 概述
為了方便我們進行文件路徑的操作,Java 7中還給我們提供了一個Path類,它位于java.nio.file包中,是一個用于操作文件路徑的工具類。Path對象和File對象類似,但操作起來更簡單。
2. Path對象創(chuàng)建方式
我們在使用Path類之前,需要先創(chuàng)建一個Path對象,Java中給我們提供了多種創(chuàng)建Path對象的方式。接下來就給大家說一下這幾種方法的使用。
2.1 通過文件路徑字符串創(chuàng)建
我們可以使用Path類的靜態(tài)方法get(String first, String... more)來創(chuàng)建一個Path對象。其中,第一個參數(shù)是文件路徑的根路徑,第二個參數(shù)及以后的參數(shù)是路徑的各個部分。
Path path = Path.get("F:/workspace", "test", "example.txt");
2.2 通過URI創(chuàng)建
我們可以使用Path類的靜態(tài)方法get(URI uri)創(chuàng)建Path對象,URI可以是一個本地文件路徑,也可以是一個遠程文件路徑。
URI uri = new URI("file:///F:/workspace/test/example.txt"); Path path = Path.get(uri);
2.3 通過文件對象創(chuàng)建
我們還可以使用文件對象的toPath()方法創(chuàng)建Path對象。
File file = new File("D:/workspace/test/example.txt"); Path path = file.toPath();
2.4 通過系統(tǒng)屬性創(chuàng)建
另外還可以使用系統(tǒng)屬性user.dir獲取當前工作目錄,然后通過Path類的靜態(tài)方法get(String first, String... more)創(chuàng)建一個Path對象。
Path path = Path.get(System.getProperty("user.dir"), "test", "example.txt");
3. 常用方法
創(chuàng)建出Path對象之后,就可以通過Path類給我們提供的一些常用方法,如創(chuàng)建、刪除、移動、復制等,對文件路徑進行操作了。以下是總結(jié)的Path對象方法的使用案例,大家來看看吧。
3.1 toAbsolutePath()
獲取絕對路徑。
Path path = Path.get("test", "example.txt"); Path absolutePath = path.toAbsolutePath();
3.2 getParent()
獲取父路徑。
Path path = Path.get("test", "example.txt"); Path parentPath = path.getParent();
3.3 getFileName()
獲取文件名。
Path path = Path.get("test", "example.txt"); Path fileName = path.getFileName();
3.4 getNameCount()
獲取路徑名稱的數(shù)量。
Path path = Path.get("F:/workspace/test/example.txt"); int nameCount = path.getNameCount();
3.5 getName(int index)
獲取指定索引位置的路徑名稱。
Path path = Path.get("F:/workspace/test/example.txt"); Path name = path.getName(2); // 返回test
3.6 subpath(int beginIndex, int endIndex)
獲取路徑的子路徑。
Path path = Path.get("F:/workspace/test/example.txt"); Path subPath = path.subpath(0, 2); // 返回F:/workspace/test
3.7 startsWith(Path other)
判斷當前路徑是否以指定路徑開始。
Path path = Path.get("F:/workspace/test/example.txt"); Path otherPath = Path.get("F:/workspace/test"); boolean startsWith = path.startsWith(otherPath); // 返回true
好了,以上就是Path類及其方法的使用了,是不是很簡單呢?
四. 結(jié)語
至此,就把File和Path對象給大家介紹完畢了,今天的重點內(nèi)容如下:
- 創(chuàng)建File對象本身不涉及IO操作;
- File類提供了多個創(chuàng)建對象的構(gòu)造方法;
- 掌握File文件和目錄的創(chuàng)建、刪除、重命名等方法。
以上就是學習Java之File文件操作方法的詳細內(nèi)容,更多關(guān)于Java File文件操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring注解@Value在controller無法獲取到值的解決
這篇文章主要介紹了Spring注解@Value在controller無法獲取到值的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11SpringCloud服務實現(xiàn)同時使用eureka和nacos方法
這篇文章主要介紹了SpringCloud服務實現(xiàn)同時使用eureka和nacos方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01IntelliJ IDEA 部署 Web 項目,看這一篇夠了!
這篇文章主要介紹了IntelliJ IDEA 部署 Web 項目的圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05