[Java EE] 文件IO(一):文件概念與文件系統操作

🌸個人主頁:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵?熱門專欄:🍕 Collection與數據結構 (91平均質量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀Java EE(94平均質量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql數據庫(93平均質量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
感謝點贊與關注~~~
在這里插入圖片描述

目錄

  • 1. 認識文件
    • 1.1 文件的兩種定義方法
    • 1.2 什么是IO
    • 1.3 文件在計算機中的儲存形式
    • 1.4 文件路徑(path)
    • 1.5 文件的分類
  • 2. Java中的文件操作
    • 2.1 File的屬性,構造方法,成員方法.
      • 2.1.1 屬性
      • 2.1.2 構造方法
      • 2.1.3 成員方法

1. 認識文件

1.1 文件的兩種定義方法

文件的定義方法分為狹義上的文件和廣義上的文件,狹義上的文件就是:針對硬盤這種持久化存儲的I/O設備,當我們想要進?數據保存時,往往不是保存成?個整體,?是獨?成?個個的單位進?保存,這個獨?的單位就被抽象成?件的概念,就類似辦公桌上的?份份真實的?件?般.通俗地來說,就是平時我們保存在硬盤上上的文件,就是狹義上的文件.
狹義文件
廣義上的文件就是:操作系統把很多的資源,包括硬件資源和軟件資源,全部都抽象成了文件.
在這里插入圖片描述

[問題] 文件夾是不是文件呢?
是的,文件類型不僅僅包括圖片文件,影像文件等.我們平時用戶叫的文件夾,專業一點講叫做目錄文件,簡稱目錄.

1.2 什么是IO

IO是input和output的縮寫,叫做輸入和輸出,這里的輸入和輸出的方向統一以CPU為參照來看.
在這里插入圖片描述
向著CPU方向來的,叫做輸入,反著CPU方向來的,叫做輸出.

1.3 文件在計算機中的儲存形式

隨著文件越來越多,我們必須對文件進行有序地組織,組織方式是按照層級的結構進行組織,也就是我們數據結構中學習到的樹形結構,即文件和文件之間有著明顯的嵌套關系文件在計算機中統一以樹形結構來存儲,它是一顆N叉樹結構.
windows操作系統中的樹形結構

1.4 文件路徑(path)

如何在文件系統中定位我們唯一一個文件呢?樹中的每一個結點都可以被一條從根開始,一直到達結點的路徑所描述,這種描述方式稱為絕對路徑.在windows操作系統中,根節點以盤符開頭,目錄和目錄之間用"/“或者”"隔開.
例如:
D:\personal\Java\MySQL\mysql-connector-java-5.1.47.jar
在這里插入圖片描述
除了可以從根節點開始之外,還可以從任意結點出發,進行路徑描述,而這種描述方式,叫做相對路徑,當前目錄用".“表示,上一級目錄用”…"表示.
例如:
當前所在目錄為MySQL

  • ./mysql-connector-java-5.1.47.jar
  • ../MySQL/mysql-connector-java-5.1.47.jar

舉例:大一新生去上課
大一新生剛來到大學,不知道大學中的教學樓都在哪里,于是在上第一節課的時候就會問路上的學長學姐:"學長,行思樓的A202教室在哪里?"于是學長便告訴了他:"直走之后右轉到行思樓,進入教學樓之后,左轉進入A座,上二樓一直直走就可以找到(絕對路徑)."但是在進入行思樓之后,這位新生又忘記了教室怎么走,于是問樓道里的一個學姐:"學姐,A202教室在哪里."于是學姐并告訴了他:“左轉進入A座,上二樓一直直走就可以找到(相對路徑).”

[拓展]
有些目錄中的文件可以通過在windowsShellPower或者Win+R中輸入絕對路徑直接運行,存在與環境變量Path中的文件可以直接通過文件名來運行.

1.5 文件的分類

即使是普通?件,根據其保存數據的不同,也經常被分為不同的類型,我們?般簡單的劃分為?本?件和?進制?件,分別指代保存被字符集編碼的?本和按照標準格式保存的?被字符集編碼過的?件.文本文件中的內容都是合法的字符,即文本文件中的二進制數據通過編碼可以構成合法的字符,但是二進制文件中存啥都可以,在經過系統編碼之后,編碼出的字符不一定合法.
我們平時常見的:docx,pptx,mp3,mp4,png,jpg等文件都是二進制文件.像txt,md,html,java,c文件都是文本文件.
那么我們如何區分這個文件是二進制文件還是文本文件呢?最簡單粗暴的方法,就是使用記事本對這個文件進行打開操作,如果打開之后是一堆亂碼,就是二進制文件,如果打開時可以看懂的字,就是文本文件.
二進制文件:
在這里插入圖片描述
文本文件:
在這里插入圖片描述

2. Java中的文件操作

對Java的文件操作,分為對文件系統的操作(創建文件,刪除文件,重命名文件等),和對文件內容操作(讀文件,寫文件).
Java中通過java.io中的File類來描述一個文件(包括目錄).但是需要注意的一點就是有File對象,并不意味著File對象真實存在.如我們在創建一個新文件的時候,文件就不存在.

2.1 File的屬性,構造方法,成員方法.

2.1.1 屬性

修飾符及類型屬性說明
static StringpathSeparator依賴于系統的路徑分隔符,String類型的表示
staticcharpathSeparator依賴于系統的路徑分隔符,char類型的表示

在windows操作系統中,分割符可以是正斜杠和反斜杠兩種.

2.1.2 構造方法

簽名說明
File(File parent,String child)根據父目錄 + 孩子文件路徑,創建?個新的File實例
File(String pathname)根據文件路徑創建?個新的File實例,路徑可以是絕對路徑或者相對路徑
File(String parent,String child)根據父目錄+孩子文件路徑,創建?個新的File實例,父目錄用路徑表示

注意:第二個字符串類型的路徑中可以是絕對路徑的字符串,也可以是相對路徑的字符串.但是要注意的一點就是,如果是相對路徑的時候,默認的開始目錄是當前項目所在的目錄.

2.1.3 成員方法

下面這些方法,都是通過調用系統的API來完成對文件的操作的.

修飾符及返回值類型?法簽名說明
StringgetParent()返回File對象的??錄?件路徑
StringgetName()返回FIle對象的純?件名稱
StringgetPath()返回File對象的?件路徑
StringgetAbsolutePath()返回File對象的絕對路徑
StringgetCanonicalPath()返回File對象的修飾過的絕對路徑
booleanexists()判斷File對象描述的?件是否真實存在
booleanisDirectory()判斷File對象代表的?件是否是?個?錄
booleanisFile()判斷File對象代表的?件是否是?個普通?件
booleancreateNewFile()根據File對象,?動創建?個空?件。成功創建后返回true
booleandelete()根據File對象,刪除該?件。成功刪除后返回true
voiddeleteOnExit()根據File對象,標注?件將被刪除,刪除動作會到JVM運?結束時才會進?
String[]list()返回File對象代表的?錄下的所有?件名
File[]listFiles()返回File對象代表的?錄下的所有?件,以File對象表?
booleanmkdir()創建File對象代表的?錄
booleanmkdirs()創建File對象代表的?錄,如果必要,會創建中間?錄
booleanrenameTo(File dest)進??件改名,也可以視為我們平時的剪切、粘貼操作
booleancanRead()判斷用戶是否對?件有可讀權限
booleancanWrite()判斷用戶是否對?件有可寫權限

常用方法演示:

public static void main(String[] args) throws IOException {//絕對路徑File file = new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest.txt");System.out.println(file.exists());//判斷文件是否存在System.out.println(file.getAbsolutePath());//輸出文件的絕對路徑System.out.println(file.getName());//獲取文件名System.out.println(file.getParent());//獲取文件的父目錄System.out.println(file.getCanonicalPath());//輸出修飾之后的路徑System.out.println(file.isDirectory());//判斷文件是否是目錄文件System.out.println(file.isFile());//判斷文件是否是非目錄文件System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest2.txt")));//因為重命名操作需要傳入的是文件類型的數據,不是字符串,我們需要通過new操作來進行對文件路徑的包裝System.out.println(file.delete());//刪除文件}

注意:這里雖然文件不存在,但是也會輸出路徑.
在這里插入圖片描述

[注意]

  • getAbsolutePath()方法中,如果構造方法中給出的是相對路徑,那么就只是把當前項目的路徑與構造方法中的路徑進行簡單的拼接,無論這個文件是否存在.其中getCanonicalPath()方法會去掉一些不必要的東西.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");//所寫的文件名不一定要存在System.out.println(file.getAbsolutePath());//只是把當前項目所在的路徑與文件名進行了簡單的拼接System.out.println(file.getCanonicalPath());//去掉了一些沒有必要的東西}

運行結果:
在這里插入圖片描述

  • mkdir()和mkdirs()方法,前者用來創建單層目錄,后者可以通過用斜杠隔開創建雙層目錄.
public static void main(String[] args) {File file = new File("./aaa/bbb/test");System.out.println(file.mkdirs());//創建目錄,包含中間目錄File file1 = new File("ccc");System.out.println(file1.mkdir());//創建目錄}

運行之后:
在這里插入圖片描述

  • 創建文件createNewFile()有時會失敗,所以在含有該方法的方法中,我們要給出throws IOException異常.
  • deleteOnExit()方法,在執行到這個方法的時候并不會立即刪除文件,而是在該調用該方法的線程結束之后才會刪除該文件.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");System.out.println(file.createNewFile());file.deleteOnExit();//在主線程結束之后才刪除文件System.out.println(file.exists());//在主線程結束之前,文件仍然存在}

運行結果:
在這里插入圖片描述此時我們可以看到,最后一個方法返回的是true.
這個方法也在我們的日常開發中有著廣泛的應用.比如系統中有一些"臨時文件"需要再進程結束之后再刪除掉.

  • 在對文件進行重命名的時候,傳入方法中的對象是一個文件類型的對象,我們不可以直接傳入字符串,我們需要在方法中通過new File(String s)的辦法來創建一個新文件.
public static void main(String[] args) throws IOException {File file = new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest.txt");System.out.println(file.createNewFile());System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初階/IoTest2.txt")));//因為重命名操作需要傳入的是文件類型的數據,不是字符串,我們需要通過new操作來進行對文件路徑的包裝}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10902.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 每日一題 ---- 【2391.收集垃圾的最少總時間】

LeetCode 每日一題 ---- 【2391.收集垃圾的最少總時間】 2391.收集垃圾的最少總時間方法:模擬(多次遍歷) 2391.收集垃圾的最少總時間 方法:模擬(多次遍歷) 需要注意的點是,處理一個單位的一個…

mysql分頁排序的坑,千萬注意!

1、問題復現 現象: mysql對無索引字段進行排序后limit ,當被排序字段有相同值時并且在limit范圍內,取的值并不是正常排序后的值,有可能第一頁查詢的記錄,重復出現在第二頁的查詢記錄中,而且第二頁的查詢結…

青少年軟件編程(Python)等級考試試卷(四級)2024年3月

電子學會2024.03青少年軟件編程(Python)等級考試試卷(四級) 一、單選題 1.運行如下代碼,若輸入整數3,則最終輸出的結果為? ( ) def f(x): if x1: s1 else: sf(x-1)*x return s nint(input("請…

Java RMI SERVER命令執行漏洞

Java RMI SERVER命令執行漏洞 一、介紹二、原理三、復現準備四、漏洞復現 一、介紹 RMI全稱是Remote Method Invocation(遠程方法調用),是專為Java環境設計的遠程方法調用機制,遠程服務器提供API,客戶端根據API提供相…

java性能分析async-profiler

項目地址 github:https://github.com/async-profiler/async-profiler cpu ./asprof -d 600s -f cpu.html pidcpu-wall:表示抓取所有狀態下的線程數據,包含:Running, Sleeping or Blocked ./asprof -e wall -d 600s -f cpu-wall…

TypeScript 工具類型

這些工具類型是 TypeScript 提供的強大功能&#xff0c;用于操作和轉換類型。下面是每個工具類型的簡要說明和示例&#xff1a; 1、Record let value: Record<string, any> { name: "", age: 0, desc: [] }; let value2: { [key: string]: any } { name: &…

java生成二維碼合并海報并加上文字

1.生成二維碼 public static byte[] generateQRCodeImages(String text, int width, int height) throws WriterException, IOException {String binary null;QRCodeWriter qrCodeWriter new QRCodeWriter();//調整白邊大小Hashtable<EncodeHintType, Object> hints n…

微信小程序新技能解鎖:輕松實現二維碼掃描與識別

微信小程序新技能解鎖&#xff1a;輕松實現二維碼掃描與識別 在移動互聯網時代&#xff0c;二維碼已成為連接線上線下的橋梁&#xff0c;而微信小程序作為輕量級應用的代表&#xff0c;自然也少不了二維碼掃描與識別的功能。本文將手把手教你如何在微信小程序中集成這項實用功…

【3dmax筆記】020:變換輸入、世界坐標、屏幕坐標案例詳解

文章目錄 一、變換輸入二、世界坐標三、屏幕坐標四、區別一、變換輸入 變換輸入可用于:移動/旋轉/縮放變換輸入,快捷鍵為F12,在變換輸入窗口中,有兩種常見重要的坐標系: 世界坐標:固定屏幕坐標:隨著選擇的視圖發生變化在3ds Max中,世界坐標(World Coordinate System)…

Git Bash和Git GUI設置中文的方法

0 前言 Git是一個分布式版本控制系統&#xff0c;可以有效、高速地處理從很小到非常大的項目版本管理。一般默認語言為英文&#xff0c;本文介紹修改Git Bash和Git GUI語言為中文的方法。 1 Git Bash設置中文方法 &#xff08;1&#xff09;鼠標右鍵&#xff0c;單擊“Git B…

網絡無線網卡無法配置正確的 dns 服務器

網絡無線網卡無法配置正確的 dns 服務器--解決辦法 網絡無線網卡無法配置正確的 dns 服務器--解決辦法 網絡無線網卡無法配置正確的 dns 服務器–解決辦法 建議先使用疑難反饋&#xff08;自帶的&#xff09; 打開網絡適配中心 之后更改適配器設置&#xff0c;在點擊 wlan 屬…

【linux】linux工具使用

這一章完全可以和前兩篇文件歸類在一起&#xff0c;可以選擇放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了&#xff0c;抱歉&#xff0c;讓我偷了會懶 1. 自動化構建工具 make , makefile make 是一個命令&#xff0c;makefile 是一個文件&…

jdk安裝使用(Linux)

文章目錄 JDK在Linux的安裝Linux運行打包好的springboot項目停止在Linux服務器上運行的Spring Boot應用程序 JDK在Linux的安裝 在Linux上安裝JDK&#xff08;Java Development Kit&#xff09;可以通過以下步驟完成&#xff1a; 下載JDK安裝包&#xff1a; 訪問Oracle官方網站…

【Java】變量類型

類變量&#xff1a;獨立于方法之外的變量&#xff0c;用static修飾實例變量&#xff1a;獨立于方法之外的變量&#xff0c;不過沒有static修飾局部變量&#xff1a;類的方法中的變量 示例1&#xff1a; public class test_A {static int a;//類變量(靜態變量)String b;//實例…

Mysql 日志(redolog, binlog, undoLog)

重做日志-redolog 是什么 innoDB存儲引擎層面的日志&#xff0c;它的作用是當 數據更新過程中數據庫發生異常導致提交的記錄丟失 為什么 mysql的基本存儲結構是頁&#xff08;記錄都在頁里面&#xff09;&#xff0c;所以更新語句時&#xff0c;mysql需要先把要更新的語句找…

Softing工業推出的edgeConnector將Allen-Bradley控制器集成到工業邊緣應用中

2024年4月17日&#xff08;哈爾&#xff09;&#xff0c;Softing宣布擴展其基于Docker的edgeConnector產品系列&#xff0c;推出了新軟件模塊edgeConnector Allen Bradley PLC&#xff0c;可方便用戶訪問來自ControlLogix和CompactLogix控制器數據。 &#xff08;edgeConnector…

Linux提權--定時任務--打包配合 SUID(本地)文件權限配置不當(WEB+本地)

免責聲明:本文僅做技術交流與學習... 目錄 定時任務 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 實戰發現: 定時任務 文件權限配置不當-WEB&本地 操作演示: 定時任務 打包配合 SUID-本地 原理: 提權通過獲取計劃任務執行文件信息進行提權 . 1、相對路徑和…

Rust中忽略JSON反序列化時的不必要字段

在Rust中處理JSON數據時&#xff0c;經常會遇到JSON數據中包含一些在目標數據結構中不存在的字段的情況。如果你使用的是serde和serde_json這兩個流行的庫來處理JSON&#xff0c;那么有一些簡單的方法可以忽略這些不必要的字段。 默認行為&#xff1a;忽略未知字段 在Rust中&…

人工智能專業(科普)

Ⅰ 簡介 人工智能&#xff08;Artificial Intelligence&#xff09;是中國普通高等學校本科專業。人工智能&#xff0c;是一個以計算機科學為基礎&#xff0c;由計算機、心理學、哲學等多學科交叉融合的交叉學科、新興學科&#xff0c;研究、開發用于模擬、延伸和擴展人的智能…

在vue3中,如何優雅的使用echarts之實現大屏項目

前置知識 效果圖 使用技術 Vue3 Echarts Gasp Gasp&#xff1a;是一個 JavaScript動畫庫,它支持快速開發高性能的 Web 動畫。在本項目中&#xff0c;主要是用于做軌跡運動 所需安裝的插件 npm i echarts npm i countup.js 數字滾動特效 npm i gsap javascript動畫庫 np…