重生之我要精通JAVA--第六周筆記

File

路徑

相對路徑

路徑1:“a.txt”
路徑2:“abc\\a.txt”

絕對路徑

路徑1:“c:\\a.txt”
路徑2:“c:\\abc\\a.txt”

  • File對象就表示一個路徑,可以是文件的路徑、也可以是文件夾的路徑
  • 這個路徑可以是存在的,也允許是不存在的
方法名稱說明
public File(String pathname)根據文件路徑創建文件對象
public File(String parent, String child)根據父路徑名字符串和子路徑名字符串創建文件對象
public File(File parent, String child)根據父路徑名對應文件對象和子路徑名字符串創建文件對象

常見成員方法

判斷、獲取

方法名稱說明
public boolean isDirectory()判斷此路徑名表示的File是否為文件夾
public boolean isFile()判斷此路徑名表示的File是否為文件
public boolean exists()判斷此路徑名表示的File是否存在
public long length()返回文件的大小(字節數量)
public String getAbsolutePath()返回文件的絕對路徑
public String getPath()返回定義文件時使用的路徑
public String getName()返回文件的名稱,帶后綴
public long lastModified()返回文件的最后修改時間(時間毫秒值)

創建、刪除

方法名稱說明
public boolean createNewFile()創建一個新的空的文件
public boolean mkdir()創建單級文件夾
public boolean mkdirs()創建多級文件夾
public boolean delete()刪除文件、空文件夾
  1. createNewFile 創建一個新的空的文件

    • 細節1:如果當前路徑表示的文件是不存在的,則創建成功,方法返回true

      如果當前路徑表示的文件是存在的,則創建失敗,方法返回false

    • 細節2:如果父級路徑是不存在的,那么方法會有異常IOException

    • 細節3:createNewFile方法創建的一定是文件,如果路徑中不包含后綴名,則創建一個沒有后綴的文件

  2. mkdir make Directory,文件夾(目錄)

    • 細節1:windows當中路徑是唯一的,如果當前路徑已經存在,則創建失敗,返回false
    • 細節2:mkdir方法只能創建單級文件夾,無法創建多級文件夾
  3. mkdirs 創建多級文件夾

    細節:既可以創建單級的,又可以創建多級的文件夾

  4. delete

    • 如果刪除的是文件,則直接刪除,不走回收站
    • 如果刪除的是空文件夾,則直接刪除,不走回收站
    • 如果刪除的是有內容的文件夾,則刪除失敗

獲取并遍歷

方法名稱說明
public File[] listFiles()獲取當前該路徑下所有內容
  • 當調用者File表示的路徑不存在時,返回null
  • 當調用者File表示的路徑是文件時,返回null
  • 當調用者File表示的路徑是一個空文件夾時,返回一個長度為0的數組
  • 當調用者File表示的路徑是一個有內容的文件夾時,將里面所有文件和文件夾的路徑放在File數組中返回
  • 當調用者File表示的路徑是一個有隱藏文件的文件夾時,將里面所有文件和文件夾的路徑放在File數組中返回,包含隱藏文件
  • 當調用者File表示的路徑是需要權限才能訪問的文件夾時,返回null
方法名稱說明
public static File[] listRoots()列出可用的文件系統根
public String[] list()獲取當前該路徑下所有內容
public String[] list(FilenameFilter filter)利用文件名過濾器獲取當前該路徑下所有內容
public File[] listFiles()獲取當前該路徑下所有內容
public File[] listFiles(FileFilter filter)利用文件名過濾器獲取當前該路徑下所有內容
public File[] listFiles(FilenameFilter filter)利用文件名過濾器獲取當前該路徑下所有內容

IO流

分類

image-20240521171323931

純文本文件:Windows自帶的記事本打開能讀懂

FileOutputStream

操作本地文件的字節輸出流,可以把程序中的數據寫到本地文件中。

一、構造方法

構造方法描述
FileOutputStream(String name)使用指定的文件名創建一個 FileOutputStream 對象。如果文件不存在,會創建一個新文件。
FileOutputStream(String name, boolean append)使用指定的文件名和 append 標志創建 FileOutputStream 對象。如果 appendtrue,字節將被寫入文件末尾。
FileOutputStream(File file)使用指定的 File 對象創建 FileOutputStream 對象。如果文件不存在,會創建一個新文件。
FileOutputStream(File file, boolean append)使用指定的 File 對象和 append 標志創建 FileOutputStream 對象。如果 appendtrue,字節將被寫入文件末尾。
FileOutputStream(FileDescriptor fdObj)創建一個文件輸出流以寫入指定的文件描述符。

二、書寫步驟

  1. 創建字節輸出流對象
  2. 寫數據
  3. 釋放資源

細節

  1. 創建字節輸出流對象
    細節1:參數是字符串表示的路徑或者是File對象都是可以的
    細節2:如果文件不存在會創建一個新的文件,但是要保證父級路徑是存在的。
    細節3:如果文件已經存在,則會清空文件
  2. 寫數據
    細節:write方法的參數是整數,但是實際上寫到本地文件中的是整數在ASCII上對應的字符
  3. 釋放資源
    細節:每次使用完流之后都要釋放資源
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt");fos.write(97);fos.close();}
}

三、write用法

方法名稱說明
void write(int b)一次寫一個字節數據
void write(byte[] b)一次寫一個字節數組數據
void write(byte[] b, int off, int len)一次寫一個字節數組的部分數據
public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt");String str = "abcd";byte[] bytes = str.getBytes();fos.write(bytes);fos.close();}
}

void write(byte[] b, int off, int len)

off:起始索引:字節數組b中的起始偏移量。表示從數組的哪個索引位置開始寫入數據。(off必須是非負整數,且不能超過數組b的長度。)

len:寫入字節數:這是要寫入的字節數。從off位置開始,連續寫入len個字節。

四、換行與續寫

1.換行
寫出一個換行符即可
windows:\r\n
Linux:\n
Mac:\r

在windows操作系統當中,java對回車換行進行了優化。
雖然完整的是\r\n,但是我們寫其中一個\r或者\n,
java也可以實現換行,因為java在底層會補全。

2.續寫

FileOutputStream(String name, boolean append)

FileOutputStream(File file, boolean append)

如果 appendtrue,字節將被寫入文件末尾。

    FileOutputStream fos = new FileOutputStream("..\\5.20\\a.txt",true);

FileInputStream

操作本地文件的字節輸入流,可以把本地文件中的數據讀取到程序中來。

一、構造方法

構造方法參數描述
FileInputStream(File file)要讀取的文件對象。
FileInputStream(String name)要讀取的文件的路徑名。
FileInputStream(FileDescriptor fd)文件描述符對象,表示已打開的文件。

二、書寫步驟

  1. 創建字節輸入流對象
  2. 讀數據
  3. 釋放資源

細節

    • 如果文件不存在,就直接報錯。
    • 一次讀一個字節,讀出來的是數據在ASCII上對應的數字
    • 讀到文件末尾了,read方法返回-1。
  1. 每次使用完流必須要釋放資源。

三、循環讀取

import java.io.FileInputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("..\\5.20\\a.txt");int b;while ((b = fis.read()) != -1) {System.out.print((char) b);}fis.close();}
}

四、read

方法名稱說明
public int read()一次讀一個字節數據
public int read(byte[] buffer)一次讀一個字節數組數據

image-20240521200038868

字符集

ASCII

存儲英文,一個字節就足以

計算機的存儲規則

  1. GB2312字符集:1980年發布,1981年5月1日實施的簡體中文漢字編碼國家標準。
    收錄7445個圖形字符,其中包括6763個簡體漢字
  2. BIG5字符集:臺灣地區繁體中文標準字符集,共收錄13053個中文字,1984年實施。
  3. GBK字符集:2000年3月17日發布,收錄21003個漢字
    包含國家標準GB13000-1中的全部中日韓漢字,和BIG5編碼中的所有漢字。
  4. Unicode字符集:
    國際標準字符集,它將世界各種語言的每個字符定義一個唯一的編碼,以滿足跨語言、跨平臺的文本信息轉換。

系統顯示:ANSI

windows系統默認使用的就是GBK。

image-20240521205532934

為什么會有亂碼

  1. 讀取數據時未讀完整個漢字
  2. 編碼和解碼時的方式不統一

編碼和解碼

Java中編碼的方法

String類中的方法說明
public byte[] getBytes()使用默認方式進行編碼
public byte[] getBytes(String charsetName)使用指定方式進行編碼

Java中解碼的方法

String類中的方法說明
String(byte[] bytes)使用默認方式進行解碼
String(byte[] bytes, String charsetName)使用指定方式進行解碼

UTF

UTF-8、UTF-16 和 UTF-32 是三種不同的字符編碼方案,它們在存儲字符時使用不同的字節長度:

  1. UTF-8: UTF-8 是一種變長編碼方案,字符的存儲長度可以是 1 到 4 個字節。在 UTF-8 中,常用的 ASCII 字符(0 到 127)使用單個字節存儲,而其他字符則使用多個字節。通常情況下,UTF-8 編碼的字節數如下:
    • 1 字節:ASCII 字符
    • 2 字節:大多數歐洲語言的常用字符
    • 3 字節:較少使用的非常見字符
    • 4 字節:較少見的字符和符號
  2. UTF-16: UTF-16 使用固定長度的 2 個字節來存儲大多數常見字符,但一些輔助字符需要使用額外的 2 個字節(總共 4 個字節)進行編碼。這意味著大多數字符都占用 2 個字節,但一些罕見字符占用 4 個字節。
  3. UTF-32: UTF-32 使用固定長度的 4 個字節來表示每個字符,無論字符的編碼大小。

字符流

字符流的底層其實就是字節流

字符流 = 字節流 + 字符集

特點

  • 輸入流:一次讀一個字節,遇到中文時,一次讀多個字節
  • 輸出流:底層會把數據按照指定的編碼方式進行編碼,變成字節再寫到文件中

image-20240521211433164

FileReader

  1. 創建字符輸入流對象

    構造方法說明
    public FileReader(File file)創建字符輸入流關聯本地文件
    public FileReader(String pathname)創建字符輸入流關聯本地文件

    細節1:如果文件不存在,就直接報錯

  2. 讀取數據

    成員方法說明
    public int read()讀取數據,讀到末尾返回-1
    public int read(char[] buffer)讀取多個數據,讀到末尾返回-1

    細節1:按字節進行讀取,遇到中文,一次讀多個字節,讀取后解碼,返回一個整數
    細節2:讀到文件末尾了,read方法返回-1

  3. 釋放資源

    成員方法說明
    public int close()釋放資源/關閉流
構造方法說明
public FileWriter(File file)創建字符輸出流關聯本地文件
public FileWriter(String pathname)創建字符輸出流關聯本地文件
public FileWriter(File file, boolean append)創建字符輸出流關聯本地文件,續寫
public FileWriter(String pathname, boolean append)創建字符輸出流關聯本地文件,續寫
成員方法
成員方法說明
void write(int c)寫出一個字符
void write(String str)寫出一個字符串
void write(String str, int off, int len)寫出一個字符串的一部分
void write(char[] cbuf)寫出一個字符數組
void write(char[] cbuf, int off, int len)寫出字符數組的一部分
  • 創建字符輸出流對象
    細節1:參數是字符串表示的路徑或者File對象都是可以的
    細節2:如果文件不存在會創建一個新的文件,但是要保證父級路徑是存在的
    細節3:如果文件已經存在,則會清空文件,如果不想清空可以打開續寫開關
  • 寫數據
    細節:如果write方法的參數是整數,但是實際上寫到本地文件中的是整數在字符集上對應的字符
  • 釋放資源
    細節:每次使用完流之后都要釋放資源

字符流原理解析

  1. 創建字符輸入流對象
    底層::聯文件,并創建緩沖區(長度為8192的字節數)
  2. 讀取數據

底層

  1. 判斷緩沖區中是否有數據可以讀取
  2. 緩沖區沒有數據:就從文件中獲取數據,裝到緩沖區中,每次盡可能裝滿緩沖區
    如果文件中也沒有數據了,返回-1
  3. 緩沖區有數據:就從緩沖區中讀取
    空參的read方法:一次讀取一個字節,遇到中文一次讀多個字節,把字節解碼并轉成十進制返回
    有參的read方法:把讀取字節,解碼,強轉三步合并了,強轉之后的字符放到數組中

已經到底啦!!

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

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

相關文章

linux線程,線程控制與線程相關概念

線程概念 線程這個詞或多或少大家都聽過,今天我們正式的來談一下線程; 在我一開始的概念中線程就是進程的一部分,一個進程中有很多個線程,這個想法基本是正確的,但細節部分呢我們需要細細講解一下; 什么…

“揭秘:為什么羊駝Ollama成為計算機運行大型語言模型的最佳拍檔?“

最近,AIM 評測了在計算機上本地運行大語言模型(LLM)的最佳工具,Ollama 脫穎而出,成為最高效的解決方案,提供了無與倫比的靈活性。Ollama 是 Jeffrey Morgan 開發的一款開源工具,它正在徹底改變愛…

我被恐嚇了,對方揚言要壓測我的網站

大家好我是聰,昨天真是水逆,在技術群里交流問題,竟然被人身攻擊了!罵的話太難聽具體就不加討論了,人身攻擊我可以接受,我接受不了他竟然說要刷我接口!!!!這下…

啟用標準大頁后內存使用率下降了

未啟用前 [rootol819c ~]# free -htotal used free shared buff/cache available Mem: 9.3Gi 984Mi 379Mi 1.5Gi 8.0Gi 6.8Gi Swap: 15Gi 3.0Mi 15Gi [rootol819c ~]# free -htotal …

【NumPy】掌握NumPy的histogram函數:數據直方圖的生成與應用詳解

🧑 博主簡介:阿里巴巴嵌入式技術專家,深耕嵌入式人工智能領域,具備多年的嵌入式硬件產品研發管理經驗。 📒 博客介紹:分享嵌入式開發領域的相關知識、經驗、思考和感悟,歡迎關注。提供嵌入式方向…

速度百倍提升,高性能 Python 編譯器 Codon 火了

引言 在當下的編程世界里,Python由于其易用性和強大的庫支持在數據科學、人工智能和網頁開發等多個領域占據著舉足輕重的地位。然而,Python的執行速度往往成為開發者的一大痛點。 針對 這一問題,Codon項目正試圖提供一個高效的解決方案。Codo…

java新特性(Stream API)

什么是 Stream API? Stream API 是 Java 8 引入的一個用于對集合數據進行函數式編程操作的強大的庫。它允許我們以一種更簡潔、易讀、高效的方式來處理集合數據,可以極大提高 Java 程序員的生產力,是目前為止對 Java 類庫最好的補充。 Stream API 的核心思想是將數據處理操作…

小識MFC,一套設計優雅與不優雅并存的類庫----小話MFC(2)

Q1: CPoint繼承于POINT,這樣有什么好處? A: 繼承的一個最基本的好處當然就是減少代碼量。CPoint和POINT內部數據一樣,只是一個提供了更多的方法來操作對象。 typedef struct tagPOINT {LONG x;LONG y; } POINT, *P…

【Flutter】動畫介紹隱式動畫

🔥 本文由 程序喵正在路上 原創,CSDN首發! 💖 系列專欄:Flutter學習 🌠 首發時間:2024年5月28日 🦋 歡迎關注🖱點贊👍收藏🌟留言🐾 目…

SpringMvc-restful設計風格

Restful 1、入門1.1 簡介1.2 實例 1、入門 1.1 簡介 RESTFul是什么 RESTFul是WEB服務接口的一種設計風格。 RESTFul定義了一組約束條件和規范&#xff0c;可以讓WEB服務接口更加簡潔、易于理解、易于擴展、安全可靠。 1.2 實例 web.xml <?xml version"1.0"…

5、xss-labs之level6

一、level6-----大小寫繞過 1、測試分析 測試了之前用過的payload&#xff0c;發現都不行&#xff0c;并且level4使用的Java偽協議也不行&#xff0c;可以得出<>、script、onclick都被過濾 2、構造payload 因為href被過濾&#xff0c;可以試一下大寫HREF 初試payload…

沒人愿意和我們最好的工程師一起工作

幾年前&#xff0c;有一位技術非常好的工程師&#xff08;我們叫他“喬恩”&#xff09;為我工作。 他的代碼寫得很好&#xff0c;代碼審查&#xff08;PRs&#xff09;也完成得很快。從技術角度來看&#xff0c;他是個出色的工程師。 但是我們從其他工程師那里得到了一些關于…

Python實現解碼二進制數據以匹配給定的C++結構體

要在Python中實現解碼二進制數據以匹配給定的C結構體Ytest&#xff0c;你需要了解每個字段在結構體中的偏移量&#xff08;由于結構體內存對齊&#xff0c;這些偏移量可能與字段的順序和大小不完全對應&#xff09;。不過&#xff0c;在沒有指定內存對齊的情況下&#xff0c;我…

使用nvm管理node多版本(安裝、卸載nvm,配置環境變量,更換npm淘寶鏡像)淘寶的鏡像域名更換

最近 使用nvm 管理 node 的時候發現nvm install node版本號 總是失敗。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因&#xff0c;因為淘寶的鏡像域名更換&#xff0c;由于 npm.taob…

2020職稱繼續教育--發揮好“顯著優勢”,堅持和完善生態文明制度體系,促進人與自然和諧共生

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、我國生態脆弱區廣布&#xff0c;適宜生存的空間不足&#xff08;&#xff09;。 B、三分之一 2、按照傳統文化的說法&#xff0c;制度體系與治理體系&#xff0c;是“體”和“用”的關系&#xff0c;強調&#xff…

BI系統:數據驅動的決策利器,引領企業走向智能化

在當今這個數據驅動的時代&#xff0c;商業智能&#xff08;BI&#xff09;系統已成為企業不可或缺的工具。BI系統不僅提高了數據處理和分析的效率&#xff0c;更重要的是&#xff0c;它能夠幫助企業做出更加明智和精準的決策。在數聚多年的從業經驗來看&#xff0c;BI系統的重…

基于直接二元搜索的片上偏振分束器設計 (Nature Photonics, 9, 6, (2015))案例復現

時間—2024.6.08 騰訊會議 智能算法驅動的光子學設計與應用

Dream

好像很多人夢寐以求的都是別人已經擁有的&#xff0c;多少人奮斗一生的目標&#xff0c;卻只是別人的起點&#xff0c;人生而自由&#xff0c;只是不在枷鎖之中&#xff0c;生活中沒有人不遺憾&#xff0c;只是沒有人喊疼&#xff0c;時間不會重來&#xff0c;已經過去了就讓它…

內存泄露問題? 怎么解決

內存泄漏在Android應用開發中是一個常見問題&#xff0c;它發生在對象不再被使用時&#xff0c;但仍然被引用&#xff0c;導致垃圾回收器無法釋放其占用的內存。這會逐漸消耗應用可用內存&#xff0c;最終可能導致應用運行緩慢、崩潰或被系統終止。以下是一些常見的內存泄漏場景…

vue3 使用vant

使用前提&#xff1a; vite創建的vue3項目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入樣式&#xff1a; main.js import vant/lib/index.css vant封裝 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…