??認(rèn)識(shí)文件
我們先來認(rèn)識(shí)狹義上的文件(file)。針對(duì)硬盤這種持久化存儲(chǔ)的I/O設(shè)備,當(dāng)我們想要進(jìn)行數(shù)據(jù)保存時(shí),往往不是保存成一個(gè)整體,而是獨(dú)立成一個(gè)個(gè)的單位進(jìn)行保存,這個(gè)獨(dú)立的單位就被抽象成文件的概念,就類似辦公桌上的一份份真實(shí)的文件一般。
文件除了有數(shù)據(jù)內(nèi)容之外,還有一部分信息,例如文件名、文件類型、文件大小等并不作為文件的數(shù)據(jù)而存在,我們把這部分信息可以視為文件的元信息
??樹型結(jié)構(gòu)組織和目錄
同時(shí),隨著文件越來越多,對(duì)文件的系統(tǒng)管理也被提上了日程,如何進(jìn)行文件的組織呢,一種合乎自然的想法出現(xiàn)了,就是按照層級(jí)結(jié)構(gòu)進(jìn)行組織 —— 也就是我們數(shù)據(jù)結(jié)構(gòu)中學(xué)習(xí)過的樹形結(jié)構(gòu)。這樣,一種專門用來存放管理信息的特殊文件誕生了,也就是我們平時(shí)所謂文件夾(folder)或者目錄(directory)的概念。
??文件路徑(Path)
如何在文件系統(tǒng)中如何定位我們的一個(gè)唯一的文件就成為當(dāng)前要解決的問題,但這難不倒計(jì)算機(jī)科學(xué)家,因?yàn)閺臉湫徒Y(jié)構(gòu)的角度來看,樹中的每個(gè)結(jié)點(diǎn)都可以被一條從根開始,一直到達(dá)的結(jié)點(diǎn)的路徑所描述,而這種描述方式就被稱為文件的絕對(duì)路徑(absolute path)
除了可以從根開始進(jìn)行路徑的描述,我們可以從任意結(jié)點(diǎn)出發(fā),進(jìn)行路徑的描述,而這種描述方式就被
稱為相對(duì)路徑(relative path),相對(duì)于當(dāng)前所在結(jié)點(diǎn)的一條路徑
??知識(shí)擴(kuò)展
即使是普通文件,根據(jù)其保存數(shù)據(jù)的不同,也經(jīng)常被分為不同的類型,我們一般簡單的劃分為文本文件和二進(jìn)制文件,分別指代保存被字符集編碼的文本和按照標(biāo)準(zhǔn)格式保存的非被字符集編碼過的文件。
Windows 操作系統(tǒng)上,會(huì)按照文件名中的后綴來確定文件類型以及該類型文件的默認(rèn)打開程序。但這個(gè)習(xí)俗并不是通用的,在 OSX、Unix、Linux 等操作系統(tǒng)上,就沒有這樣的習(xí)慣,一般不對(duì)文件類型做如此精確地分類。
文件由于被操作系統(tǒng)進(jìn)行了管理,所以根據(jù)不同的用戶,會(huì)賦予用戶不同的對(duì)待該文件的權(quán)限,一般地可以認(rèn)為有可讀、可寫、可執(zhí)行權(quán)限
Windows 操作系統(tǒng)上,還有一類文件比較特殊,就是平時(shí)我們看到的快捷方式(shortcut),這種文件只是對(duì)真實(shí)文件的一種引用而已。其他操作系統(tǒng)上也有類似的概念,例如,軟鏈接(soft link)等
最后,很多操作系統(tǒng)為了實(shí)現(xiàn)接口的統(tǒng)一性,將所有的 I/O 設(shè)備都抽象成了文件的概念,使用這一理念,最為知名的就是 Unix、Linux 操作系統(tǒng) —— 萬物皆文件
??Java 中操作文件
Java 中通過 java.io.File 類來對(duì)一個(gè)文件(包括目錄)進(jìn)行抽象的描述。
值得注意的是,有 File 對(duì)象,并不代表真實(shí)存在該文件
??File 概述
我們先來看看 File 類中的常見屬性、構(gòu)造方法和方法
??屬性
修飾符及類型 | 屬性 | 說明 |
---|---|---|
static String | pathSeparator | 依賴于系統(tǒng)的路徑分隔符,String 類型的表示 |
static char | pathSeparator | 依賴于系統(tǒng)的路徑分隔符,char 類型的表示 |
??構(gòu)造方法
簽名 | 說明 |
---|---|
File(File parent, Stringchild) | 根據(jù)父目錄 + 孩子文件路徑,創(chuàng)建一個(gè)新的 File 實(shí)例 |
File(String pathname) | 根據(jù)文件路徑創(chuàng)建一個(gè)新的 File 實(shí)例,路徑可以是絕對(duì)路徑或者相對(duì)路徑 |
File(String parent, Stringchild) | 根據(jù)父目錄 + 孩子文件路徑,創(chuàng)建一個(gè)新的 File 實(shí)例,父目錄用路徑表示 |
??方法
修飾符及返回值類型 | 方法簽名 | 說明 |
---|---|---|
String | getParent() | 返回 File 對(duì)象的父目錄文件路徑 |
String | getName() | 返回 FIle 對(duì)象的純文件名稱 |
String | getPath() | 返回 File 對(duì)象的文件路徑 |
String | getAbsolutePath() | 返回 File 對(duì)象的絕對(duì)路徑 |
String | getCanonicalPath() | 返回 File 對(duì)象的修飾過的絕對(duì)路徑 |
boolean | exists() | 判斷 File 對(duì)象描述的文件是否真實(shí)存在 |
boolean | isDirectory() | 判斷 File 對(duì)象代表的文件是否是一個(gè)目錄 |
boolean | isFile() | 判斷 File 對(duì)象代表的文件是否是一個(gè)普通文件 |
boolean | createNewFile() | 根據(jù) File 對(duì)象,自動(dòng)創(chuàng)建一個(gè)空文件。成功創(chuàng)建后返回 true |
boolean | delete() | 根據(jù) File 對(duì)象,刪除該文件。成功刪除后返回 true |
void | deleteOnExit() | 根據(jù) File 對(duì)象,標(biāo)注文件將被刪除,刪除動(dòng)作會(huì)到JVM 運(yùn)行結(jié)束時(shí)才會(huì)進(jìn)行 |
String[] | list() | 返回 File 對(duì)象代表的目錄下的所有文件名 |
File[] | listFiles() | 返回 File 對(duì)象代表的目錄下的所有文件,以 File 對(duì)象表示 |
boolean | mkdir() | 創(chuàng)建 File 對(duì)象代表的目錄 |
boolean | mkdirs() | 創(chuàng)建 File 對(duì)象代表的目錄,如果必要,會(huì)創(chuàng)建中間目錄 |
boolean | renameTo(Filedest) | 進(jìn)行文件改名,也可以視為我們平時(shí)的剪切、粘貼操作 |
boolean | canRead() | 判斷用戶是否對(duì)文件有可讀權(quán)限 |
boolean | canWrite() | 判斷用戶是否對(duì)文件有可寫權(quán)限 |
??File使用實(shí)例代碼演示
??實(shí)例一
觀察get系列的特點(diǎn)和差異
代碼如下:
import java.io.File;
import java.io.IOException;
public class IODemo1 {
public static void main(String[] args) throws IOException {
File file = new File("./遇事問春風(fēng)乄.txt");
System.out.println(file.getName());
System.out.println(file.getParent());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
}
注意:有 File 對(duì)象,并不代表真實(shí)存在該文件
也就是說這里的遇事問春風(fēng)乄可能根本不存在
運(yùn)行結(jié)果如下:
??實(shí)例二
普通文件的創(chuàng)建、刪除
代碼如下:
import java.io.File;
import java.io.IOException;
public class IOdemo2 {
public static void main(String[] args) throws IOException {
File file = new File("./遇事問春風(fēng)乄.txt"); // 要求該文件不存在,才能看到相同的現(xiàn)象
//文件是否存在
System.out.println(file.exists());
//是否是文件目錄
System.out.println(file.isDirectory());
//是否為普通文件
System.out.println(file.isFile());
//創(chuàng)建該文件
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
//如果有重復(fù),則不會(huì)創(chuàng)建。返回false
System.out.println(file.createNewFile());
}
}
結(jié)果如下:
如果你跟博主一樣是使用IDEA編譯器的話,還可以看到該文件路徑下已經(jīng)產(chǎn)生了該文件
??實(shí)例三
普通文件的刪除
代碼如下:
import java.io.File;
import java.io.IOException;
public class IODemo3 {
public static void main(String[] args) throws IOException {
File file = new File("./遇事問春風(fēng)乄.txt"); // 要求該文件不存在,才能看到相同的現(xiàn)象
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.delete());
System.out.println(file.exists());
}
}
結(jié)果展示:
??實(shí)例四
觀察 deleteOnExit 的現(xiàn)象
我們先來觀察以下代碼,沒有加deleteOnExit
import java.io.File;
import java.io.IOException;
public class IODemo4 {
public static void main(String[] args) throws IOException {
File file = new File("./遇事問春風(fēng)乄.txt"); // 要求該文件不存在,才能看到相同的現(xiàn)象
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
//file.deleteOnExit();
System.out.println(file.exists());
}
}
結(jié)果如下:
注意這時(shí)候我們是可以看到我們創(chuàng)建了該文件的
當(dāng)我們加上deleteOnExit后再來看看運(yùn)行結(jié)果
但是呢,當(dāng)程序運(yùn)行結(jié)束后卻觀察不到該路徑下的該文件。
這就是deleteOnExit方法的效果
??實(shí)例五
觀察目錄的創(chuàng)建
import java.io.File;
public class IODemo5 {
public static void main(String[] args) {
File dir = new File("IO-dir"); // 要求該目錄不存在,才能看到相同的現(xiàn)象
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
結(jié)果如下:
??實(shí)例六
觀察目錄創(chuàng)建2——mkdirs
import javax.swing.*;
import java.io.File;
public class IODemo5 {
public static void main(String[] args) {
File dir = new File("./IO-dir/aa/bb"); // 要求所有目錄不存在,才能看到相同的現(xiàn)象
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
運(yùn)行結(jié)果如下:
mkdir() 的時(shí)候,如果中間目錄不存在,則無法創(chuàng)建成功; mkdirs() 可以解決這個(gè)問題。
import javax.swing.*;
import java.io.File;
public class IODemo5 {
public static void main(String[] args) {
File dir = new File("./IO-dir/aa/bb"); // 要求所有目錄不存在,才能看到相同的現(xiàn)象
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdirs());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
結(jié)果展示:
??實(shí)例七
觀察文件重命名
首先創(chuàng)建一個(gè)文件如下:
文件重命名如下:文章來源:http://www.zghlxwxcb.cn/news/detail-733997.html
?總結(jié)
關(guān)于《【JavaEE初階】 認(rèn)識(shí)文件與Java中操作文件》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-733997.html
到了這里,關(guān)于【JavaEE初階】 認(rèn)識(shí)文件與Java中操作文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!