[TOC]
# 1. 數組
數組是一種有序、可索引、支持隨機訪問的數據結構,適用于存儲同一類型下固定數量的數據。在Java中,數組的大小是固定的,創建后長度不可變。數組的應用方法包括創建數組、訪問元素、遍歷數組、操作數組等。在項目中,數組可以用來存儲數據集合,作為屬性或方法的參數與返回值,在算法和邏輯中充當重要角色。掌握數組的特性和使用方法是Java編程中非常重要的基礎知識。
## 1.1. 基本要素
| 要素 | 說明 |
| ----------- | ------------------------------------------------------------ |
| 技術邊界 | 數組的大小是固定的,創建后長度不可變。 |
| 特性 | 有序、可索引、支持隨機訪問、基本類型或引用類型。 |
| 使用場景 | 需要在同一類型下存儲固定數量的數據時使用數組。 |
| 應用方法 | 創建數組:type[] arrayName = new type[length]; <br>訪問元素:arrayName[index]<br>遍歷數組:for或foreach循環 |
| 與項目結構的關系 | 數組可以用來存儲項目中的數據集合,作為屬性或方法的參數與返回值,在算法和邏輯中充當重要角色。 |
| 實施關鍵流程 | 1. 聲明數組變量并指定類型與長度<br>2. 創建數組<br>3. 訪問元素或修改元素值<br>4. 遍歷數組元素<br>5. 操作數組(翻轉、排序、查找等) |
## 1.2. 基本數組操作
包含創建、訪問、修改、獲取、遍歷、排序和查找方法。
| 方法名稱 | 描述 |
| --- | --- |
| `int[] arr = new int[length] | 創建一個指定長度的 int 類型數組。 |
| `int[] arr = {value1, value2, ..., valueN} | 創建一個包含指定元素的 int 類型數組。 |
| `int value = arr[index]| 訪問數組中的指定元素。 |
| `arr[index] = value | 修改數組中的指定元素。 |
| `int length = arr.length| 獲取數組的長度。 |
| `for (int i = 0; i < arr.length; i++) {...}| 遍歷數組中的所有元素。 |
| `Arrays.sort(arr)| 對數組進行排序。 |
| `int index = Arrays.binarySearch(arr, key)| 在一個已排序的數組中查找指定元素的位置。 |
## 1.3. 高級靜態方法
以下方法都是`Arrays`類的靜態方法,因此需要使用`Arrays.`前綴來調用。
* 在使用`Arrays.copyOf()`方法時,需要注意新數組的長度不能超過原數組的長度,否則會拋出`ArrayIndexOutOfBoundsException`異常。
* 在使用`Arrays.binarySearch()`方法時,需要注意數組必須是已排序的,否則可能會得到錯誤的結果。
| 方法名稱 | 描述 |
| --- | --- |
| `Arrays.toString(int[] arr)| 將一個數組轉換成字符串,并以字符串形式返回。 |
| `Arrays.copyOf(int[] original, int newLength)| 將一個數組復制到一個新的數組中,并返回新數組的引用。 |
| `Arrays.fill(int[] a, int val)| 將一個數組中的所有元素都設置為指定的值。 |
| `Arrays.binarySearch(int[] a, int key)| 在一個已排序的數組中查找指定元素的位置。 |
# I\O技術
## 技術邊界
> Java I/O 的技術邊界包括文件系統、網絡、標準輸入輸出流等。Java I/O 可以讀取或寫入文件、套接字、管道、標準輸入/輸出流等數據源。
Java I/O操作中涉及到的Stream在使用完畢后需要正確關閉,否則會造成資源泄露。
## 特性
InputStream和OutputStream分別代表輸入流和輸出流的抽象基類。字節流和字符流提供的接口不同,字符流用來處理字符,字節流則可以處理任何數據。
> Java I/O 具有以下特性:
* Java I/O 可以讀取或寫入不同類型的數據,包括文本、二進制數據等。
* Java I/O 支持字節流和字符流兩種不同類型的 I/O 操作。
* Java I/O 支持同步和異步操作。
* Java I/O 支持過濾器流,可以對輸入或輸出流進行過濾或處理。
* Java I/O 可以通過緩沖流提高數據讀取或寫入的性能。
## 使用場景
項目中需要讀取文件、控制臺輸入、網絡操作、寫日志等場景會使用到I/O。
> Java I/O 適用于需要讀取或寫入數據的場景,例如:
* 讀取或寫入文件、網絡數據等。
* 讀取或寫入用戶輸入的數據。
* 與其他程序進行交互,例如讀取或寫入標準輸入輸出流。
* 對數據進行過濾或處理,例如壓縮或加密數據。
## 應用方法
* File文件:FileInputStream、FileOutputStream、FileReader、FileWriter等。
* 控制臺:System.in、System.out。
* 網絡:Socket、ServerSocket等。
> Java I/O 的應用方法包括:
* 創建輸入或輸出流,用于讀取或寫入數據。
* 讀取或寫入數據,可以通過字節流或字符流進行操作。
* 使用過濾器流對輸入或輸出流進行過濾或處理。
* 關閉輸入或輸出流,釋放資源。
以下是一個簡單的 Java I/O 示例:
```
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
// 創建一個文件輸出流
FileOutputStream fos = new FileOutputStream("output.txt");
// 寫入數據
fos.write("Hello, world!".getBytes());
// 關閉輸出流
fos.close();
// 創建一個文件輸入流
FileInputStream fis = new FileInputStream("output.txt");
// 創建一個字節數組,用于存儲讀取到的數據
byte[] buffer = new byte[1024];
// 讀取數據到字節數組中,返回讀取的字節數
int len = fis.read(buffer);
// 將字節數組中的數據轉換成字符串并輸出
System.out.println(new String(buffer, 0, len));
// 關閉輸入流
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
## 與項目中的結構關系
I/O涉及到的Stream在業務邏輯和數據層面均起著重要作用,通過I/O讀寫的文件、數據庫、網絡數據等都與項目的結構和功能息息相關。
> Java I/O 在項目中通常用于與文件、網絡等數據源進行交互,讀取或寫入數據。在項目中,Java I/O 可以作為屬性或方法的參數與返回值,用于進行數據讀取或寫入等操作。
## 實施關鍵流程
**以文件讀寫為例:**
1. 創建File對象
2. 創建文件輸入/輸出流
3. 進行讀寫操作
4. 關閉流
5. 處理異常
> Java I/O 的實施關鍵流程包括:
1. 創建輸入或輸出流對象,用于讀取或寫入數據。
2. 讀取或寫入數據,可以通過字節流或字符流進行操作。
3. 使用過濾器流對輸入或輸出流進行過濾或處理。
4. 關閉輸入或輸出流,釋放資源。
需要注意的是,在使用 Java I/O 進行數據讀取或寫入時,需要合理使用緩沖流等技術手段,以提高數據讀取或寫入的性能。同時也需要注意輸入或輸出流的關閉,避免資源泄漏。
## 字節流操作
### FileInputStream
* `FileInputStream(String name)`:創建一個文件輸入流,以指定的名稱打開文件進行讀取。
* `FileInputStream(File file)`:創建一個文件輸入流,以指定的File對象表示的文件進行讀取。
* `int read()`:讀取一個字節的數據并返回,如果已到達文件末尾,則返回 -1。
* `int read(byte[] b)`:從輸入流中讀取一定數量的字節,并將其存儲到緩沖區數組 b 中。
* `int read(byte[] b, int off, int len)`:從輸入流中讀取最多 len 個字節的數據,并將其存儲到偏移量為 off 的緩沖區數組 b 中。
* `long skip(long n)`:從輸入流中跳過并丟棄 n 個字節的數據,并返回實際跳過的字節數。
* `int available()`:返回可以從輸入流中讀取的估計剩余字節數。
* `void close()`:關閉輸入流并釋放與之關聯的所有系統資源。
### FileOutputStream
* `FileOutputStream(String name)`:創建一個文件輸出流,以指定的名稱打開文件進行寫入。
* `FileOutputStream(File file)`:創建一個文件輸出流,以指定的File對象表示的文件進行寫入。
* `void write(int b)`:將指定的字節寫入輸出流。
* `void write(byte[] b)`:將指定的字節數組寫入輸出流。
* `void write(byte[] b, int off, int len)`:將指定的字節數組的一部分寫入輸出流。
* `void flush()`:刷新輸出流并強制寫出任何緩沖的輸出字節。
* `void close()`:關閉輸出流并釋放與之關聯的所有系統資源。
## 字符流操作
### FileReader
* `FileReader(String fileName)`:創建一個文件輸入流,以指定的名稱打開文件進行讀取。
* `FileReader(File file)`:創建一個文件輸入流,以指定的File對象表示的文件進行讀取。
* `int read()`:讀取一個字符的數據并返回,如果已到達文件末尾,則返回 -1。
* `int read(char[] cbuf)`:從輸入流中讀取一定數量的字符,并將其存儲到緩沖區數組 cbuf 中。
* `int read(char[] cbuf, int off, intlen)`:從輸入流中讀取最多 len 個字符的數據,并將其存儲到偏移量為 off 的緩沖區數組 cbuf 中。
* `long skip(long n)`:從輸入流中跳過并丟棄 n 個字符的數據,并返回實際跳過的字符數。
* `void close()`:關閉輸入流并釋放與之關聯的所有系統資源。
### FileWriter
* `FileWriter(String fileName)`:創建一個文件輸出流,以指定的名稱打開文件進行寫入。
* `FileWriter(File file)`:創建一個文件輸出流,以指定的File對象表示的文件進行寫入。
* `void write(int c)`:將指定的字符寫入輸出流。
* `void write(char[] cbuf)`:將指定的字符數組寫入輸出流。
* `void write(char[] cbuf, int off, int len)`:將指定的字符數組的一部分寫入輸出流。
* `void write(String str)`:將指定的字符串寫入輸出流。
* `void write(String str, int off, int len)`:將指定字符串的一部分寫入輸出流。
* `void flush()`:刷新輸出流并強制寫出任何緩沖的輸出字符。
* `voidclose()`:關閉輸出流并釋放與之關聯的所有系統資源。
## 緩沖流操作
### BufferedInputStream
* `BufferedInputStream(InputStream in)`:創建一個帶有緩沖區的輸入流,用于提高數據讀取的性能。
* `int read()`:從輸入流中讀取一個字節的數據,并返回讀取的字節數據。
* `int read(byte[] b, int off, int len)`:從輸入流中讀取最多 len 個字節的數據,并將其存儲到偏移量為 off 的緩沖區數組 b 中。
* `void close()`:關閉輸入流并釋放與之關聯的所有系統資源。
### BufferedOutputStream
* `BufferedOutputStream(OutputStream out)`:創建一個帶有緩沖區的輸出流,用于提高數據寫入的性能。
* `void write(int b)`:將指定的字節寫入輸出流。
* `void write(byte[] b, int off, int len)`:將指定的字節數組的一部分寫入輸出流。
* `void flush()`:刷新輸出流并強制寫出任何緩沖的輸出字節。
* `void close()`:關閉輸出流并釋放與之關聯的所有系統資源。
### BufferedReader
* `BufferedReader(Reader in)`:創建一個帶有緩沖區的輸入流,用于提高數據讀取的性能。
* `String readLine()`:讀取一行文本數據并返回,如果已到達文件末尾,則返回 null。
* `void close()`:關閉輸入流并釋放與之關聯的所有系統資源。
### BufferedWriter
* `BufferedWriter(Writer out)`:創建一個帶有緩沖區的輸出流,用于提高數據寫入的性能。
* `void write(char[] cbuf, int off, int len)`:將指定的字符數組的一部分寫入輸出流。
* `void write(String str, int off, int len)`:將指定字符串的一部分寫入輸出流。
* `void newLine()`:寫入一個行分隔符,并強制將緩沖區中的數據寫入輸出流。
* `void flush()`:刷新輸出流并強制寫出任何緩沖的輸出字符。
* `void close()`:關閉輸出流并釋放與之關聯的所有系統資源。
# 3. 字符串
## 3.1. 基本要素
| 要素 | 說明 |
| ----------- | ------------------------------------------------------------ |
| 技術邊界 | 字符串的大小一旦確定就不可變。 |
| 特性 | 字符串是不可變的字符序列,可以看作字符數組,底層由char數組實現。字符串對象一旦創建,其值就不可改變。 |
| 使用場景 | 需要操作和存儲字符序列數據時使用字符串。 |
| 應用方法 | 創建字符串:String str = "hello"; <br>訪問字符:str.charAt(0)<br>字符串長度:str.length() <br>遍歷字符串:for或foreach循環 |
| 與項目結構的關系 | 字符串可以用來存儲項目中的字符串常量或動態拼接得到的字符串,作為屬性或方法的參數與返回值,在業務邏輯和算法中發揮重要作用。 |
| 實施關鍵流程 | 1. 聲明字符串變量<br>2. 使用字符串常量或構造方法創建字符串<br>3. 訪問字符串中的字符<br>4. 獲取字符串長度<br>5. 遍歷字符串元素<br>6. 字符串操作(拼接、提取子串、分割、替換等) |
## 3.2. 字符串操作
### 3.2.1. 創建字符串
| 操作 | 方法 |
| --- | --- |
| 使用字符串字面量創建字符串對象 | `String str = "Hello world!"; |
| 創建一個空字符串對象 | `String str = new String(); |
| 使用字符數組 value 創建字符串對象 | `String str = new String(char[] value); |
| 使用字符數組 value 的一部分創建字符串對象 | `String str = new String(char[] value, int offset, int count); |
| 使用字節數組 bytes 創建字符串對象,按照默認字符集解碼 | `String str = new String(byte[] bytes); |
| 使用字節數組 bytes 的一部分創建字符串對象,按照默認字符集解碼 | `String str = new String(byte[] bytes, int offset, int length); |
| 使用字節數組 bytes 的一部分創建字符串對象,按照指定的字符集解碼 | `String str = new String(byte[] bytes, int offset, int length, Charset charset); |
### 3.2.2. 操作字符串數據
| 操作 | 方法 |
| --- | --- |
| 返回字符串的長度 | `int length()` |
| 返回指定位置 index 處的字符 | `char charAt(int index) |
| 返回字符 ch 在字符串中第一次出現的位置 | `int |
| 返回字符 ch 在字符串中從指定的位置 fromIndex 開始第一次出現的位置 | `int indexOf(int ch, int fromIndex) |
| 返回字符串 str 在字符串中第一次出現的位置 | `int indexOf(String str) |
| 返回字符串 str 在字符串中從指定的位置 fromIndex 開始第一次出現的位置 | `int indexOf(String str, int fromIndex) |
| 返回字符 ch 在字符串中最后一次出現的位置 | `int lastIndexOf(int ch) |
| 返回字符 ch 在字符串中從指定的位置 fromIndex 開始最后一次出現的位置 | `int lastIndexOf(int ch, int fromIndex) |
| 返回字符串 str 在字符串中最后一次出現的位置 | `int lastIndexOf(String str) |
| 返回字符串 str 在字符串中從指定的位置 fromIndex 開始最后一次出現的位置 | `int lastIndexOf(String str, int fromIndex) |
| 測試字符串是否以指定的前綴開頭 | `boolean startsWith(String prefix) |
| 測試字符串是否以指定的后綴結尾 | `boolean endsWith(String suffix) |
| 返回從指定位置 beginIndex 到字符串末尾的子字符串 | `String substring(int beginIndex) |
| 返回從指定位置beginIndex 到指定位置 endIndex 的子字符串(不包括 endIndex 位置的字符) | `String substring(int beginIndex, int endIndex) |
| 返回將字符串中所有舊字符 oldChar 替換為新字符 newChar 后的新字符串 | `String replace(char oldChar, char newChar) |
| 返回將字符串中所有目標序列 target 替換為替換序列 replacement 后的新字符串 | `String replace(CharSequence target, CharSequence replacement) |
| 返回去除字符串首尾空格后的新字符串 | `String trim() |
| 返回將字符串中所有字符轉換為小寫字母后的新字符串 | `String toLowerCase() |
| 返回將字符串中所有字符轉換為大寫字母后的新字符串 | `String toUpperCase() |
| 將指定對象 obj 轉換為字符串,如果 obj 是字符串類型,直接返回 obj,否則返回 obj.toString() 的值 | `String valueOf(Object obj) |
### 3.2.3. 操作字符串數組
| 操作 | 方法 |
| --- | --- |
| 將字符串按照正則表達式 regex 分割為字符串數組 | `String[] split(String regex) |
| 將字符串按照正則表達式 regex 分割為字符串數組,最多分割 limit 次 | `String[] split(String regex, int limit) |
| 使用指定的分隔符 delimiter 連接字符串數組 elements 中的元素,返回連接后的新字符串 | `String join(CharSequence delimiter, CharSequence... elements) |
### 3.2.4. 操作字符串比較
| 操作 | 方法 |
| --- | --- |
| 比較字符串與指定對象 obj 是否相等 | `boolean equals(Object obj) |
| 比較字符串與另一個字符串 anotherString 是否相等(忽略大小寫) | `boolean equalsIgnoreCase(String anotherString) |
| 按照字典序比較字符串與另一個字符串 anotherString,返回比較結果 | `int compareTo(String anotherString) |
| 按照字典序比較字符串與另一個字符串 str,忽略大小寫,返回比較結果 | `int compareToIgnoreCase(String str) |
| 比較字符串與指定字符序列 cs 是否相等 | `boolean contentEquals(CharSequence cs) |
### 3.2.5. 操作字符串格式化
| 操作 | 方法 |
| --- | --- |
| 使用指定的格式字符串 format 和參數 args 格式化字符串 | `String format(String format, Object... args) |
| 使用指定的本地化對象 l、格式字符串 format 和參數 args 格式化字符串 | `String format(Locale l, String format, Object... args) |
| 使用指定的格式字符串 format 和參數 args 格式化字符串并打印到指定輸出流 out 中 | `PrintStream |
# 4. 異常類
## 4.1. 基本要素
| 要素??????? | 說明???????????????????????????????????????????????????????? |
| ----------- | ------------------------------------------------------------ |
| 技術邊界??? | 異常會打斷程序正常執行流程,如果不處理會導致`程序終止`。?????? |
| 特性??????? | `Throwable`是所有異常的祖先。異常分為兩種:錯誤(Error)和異常(Exception)。異常又分為運行時異常和非運行時異常。|
| 使用場景?? | 程序中可能出現的異常情況。`比如:`空指針訪問、數組下標越界、文件找不到等。|
| 應用方法?? |`使用try-catch-finally`語句進行異常處理。<br> `使用throw關鍵字` 拋出異常。自定義異常類需要繼承Exception或RuntimeException。|
| 與項目結構的關系 | 異常處理機制在項目中起到很重要的作用,可以保證程序在出現異常情況下仍能正常運行,避免因為異常而中斷,影響用戶體驗。 |
| 實施關鍵流程 | 1. 識別可能出現的異常情況。<br>2. 使用try-catch語句進行異常捕獲與處理。<br>3. 在catch塊中處理異常。<br>4. finally塊用于執行無論是否出現異常都需要執行的代碼。<br>5. 使用throw拋出自定義異常。<br>6. 自定義異常類繼承Exception或RuntimeException。 |
### 下面結合代碼示例詳細說明異常處理的實施關鍵流程:
#### 1. 識別可能出現的異常情況:
```
// 打開文件可能產生FileNotFoundException
File file = new File("text.txt");
```
#### 2. 使用try-catch語句進行異常捕獲:
```
try {
FileInputStream fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
// 處理異常
}
```
#### 3. 在catch塊中處理異常:
```
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
```
#### 4. finally塊:
```
finally {
// 關閉流等操作
}
```
#### 5. 使用throw拋出自定義異常:
```
throw new MyException("自定義異常信息");
```
#### 6. 自定義異常類:
```
public class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
}
```
## 4.2. 異常類列表方法
### Throwable 類方法
*****
| 方法 | 描述 |
| --- | --- |
| getMessage() | 返回異常的詳細信息字符串。 |
| getCause() | 返回引發當前異常的原因。 |
| printStackTrace() | 輸出異常堆棧跟蹤信息。 |
| getStackTrace() | 返回一個包含堆棧跟蹤信息的數組。 |
| fillInStackTrace() | 填充當前異常的堆棧跟蹤信息。 |
| toString() | 返回包含異常類名和詳細信息的字符串。 |
| addSuppressed(Throwable exception) | 將指定的異常添加到當前異常的抑制列表中。 |
| getSuppressed() | 返回當前異常的抑制列表。 |
### Exception 類方法
*****
| 方法 | 描述 |
| --- | --- |
| printStackTrace(PrintStream s) | 將異常堆棧跟蹤信息輸出到指定的輸出流中。 |
| printStackTrace(PrintWriter s) | 將異常堆棧跟蹤信息輸出到指定的輸出流中。 |
| setStackTrace(StackTraceElement\[\] stackTrace) | 設置當前異常的堆棧跟蹤信息。 |
| initCause(Throwable cause) | 初始化當前異常的原因。 |
| fillInStackTrace() | 填充當前異常的堆棧跟蹤信息。 |
| getCause() | 返回引發當前異常的原因。 |
### RuntimeException 類方法
*****
| 方法 | 描述 |
| --- | --- |
| RuntimeException(String message) | 使用指定的詳細信息構造新的運行時異常。 |
| RuntimeException(String message, Throwable cause) | 使用指定的詳細信息和原因構造新的運行時異常。 |
| RuntimeException(Throwable cause) | 使用指定的原因構造新的運行時異常。 |
| NullPointerException | 表示應用程序試圖使用 null 值的對象引用時拋出的異常。 |
| ClassCastException | 表示在類型轉換期間發生的異常。 |
| IllegalArgumentException | 表示向方法傳遞了一個不合法或不正確的參數時拋出的異常。 |
| ArithmeticException | 表示算術運算期間發生的異常。 |
| IndexOutOfBoundsException | 表示數組或字符串索引超出范圍時拋出的異常。 |
### ArrayIndexOutOfBoundsException
*****
| 方法 | 描述 |
| --- | --- |
| ArrayIndexOutOfBoundsException() | 構造一個新的 ArrayIndexOutOfBoundsException,沒有詳細信息。 |
| ArrayIndexOutOfBoundsException(int index) | 構造一個新的 ArrayIndexOutOfBoundsException,其中包含指定索引的詳細信息。 |
| ArrayIndexOutOfBoundsException(String s) | 構造一個新的 ArrayIndexOutOfBoundsException,其中包含指定的詳細信息。 |
| StringIndexOutOfBoundsException | 表示字符串索引超出范圍時拋出的異常。 |
| NullPointerException | 表示應用程序試圖使用 null 值的對象引用時拋出的異常。 |
| NumberFormatException | 表示應用程序試圖將字符串轉換為數字時拋出的異常。 |
| IllegalStateException | 表示應用程序試圖在不適當的時間調用方法時拋出的異常。 |
| InterruptedException | 表示線程被中斷時拋出的異常。 |
| UnsupportedOperationException | 表示不支持請求的操作時拋出的異常。 |
| IOException | 表示發生輸入或輸出錯誤時拋出的異常。 |
| FileNotFoundException | 表示嘗試打開指定文件時未找到該文件時拋出的異常。 |
# 5. 文件管理
## 4.1. 技術描述
| 技術 | 描述 |
| --- | --- |
| Java I/O 流 | 通過 Java I/O 流來讀取和寫入文件。Java 提供了多種 I/O 流,包括字節流和字符流,可以根據需要選擇合適的流類型。 |
| NIO(New I/O) | 一種基于緩沖區、通道和選擇器的 I/O 模型,提供了非阻塞式的高效文件讀寫方式,適用于高并發和大文件讀寫場景。 |
| java.nio.file 包 | Java SE 7 引入了 java.nio.file 包,提供了一套全新的文件系統 API,可以更方便、更高效地操作文件和目錄,包括文件復制、移動、刪除、創建等操作。 |
| Java 文件操作類 | Java 提供了多個文件操作類,如 File、FileInputStream、FileOutputStream、BufferedReader、BufferedWriter 等,可以使用這些類來操作文件和目錄,例如創建、讀取、寫入、刪除等操作。 |
| Apache Commons IO | 是一個流行的開源 Java 庫,提供了多個文件和流操作的工具類,包括文件復制、移動、刪除、比較、查找等操作,可幫助簡化文件操作的編碼工作。 |
| 使用場景 | 文件讀寫、文件拷貝、文件壓縮、文件解壓、文件加密、文件解密、文件上傳、文件下載、文件備份、文件同步等。 |
| 應用方法 | 通過 Java I/O 流或 NIO 操作文件,或使用 java.nio.file 包中提供的 API 操作文件,或使用 Apache Commons IO 提供的工具類操作文件。 |
| 與項目中的結構關系 | 文件管理是許多項目中必不可少的一部分,例如 Web 項目中的文件上傳和下載,后臺管理系統中的文件備份和同步等。文件管理的實現通常與項目中的其他模塊和組件相互關聯,需要與數據庫、界面、業務邏輯等模塊進行交互。 |
| 實施關鍵流程 | <br>1\. 確定文件管理的需求和范圍;<br>2. 選擇適合的文件操作技術和工具;<br>3. 設計文件管理的數據結構和存儲方式;<br>4. 實現文件上傳、下載、備份、同步等功能;<br>5. 進行文件的權限控制和安全保護;<br>6. 進行文件的性能優化和異常處理;<br>7. 進行測試和調試;<br>8. 部署和上線文件管理系統。<br>以上是實施文件管理的關鍵流程,其中需要特別注意文件的安全性和性能優化。 |
## 4.2. 基本要素
| 要素??????? | 說明???????????????????????????????????????????????????????? |
| ----------- | ------------------------------------------------------------ |
| 技術邊界??? | Java對文件操作也有一定的限制,比如磁盤空間、文件數量等。???? |
| 特性??????? | Java使用File類代表文件與目錄,File類的對象可以是文件或目錄。 File類只能操作文件屬性,需要使用IO流讀取與寫入文件內容。|
| 使用場景?? | 需要對文件進行創建、刪除、重命名、修改時間查詢等操作時使用文件管理。|
| 應用方法?? |File類的常用方法:createNewFile():創建文件delete():刪除文件renameTo():重命名文件isFile():判斷是否為文件lastModified():獲取最后修改時間length():獲取文件大小listFiles():列出目錄的內容等方法。?? |
| 與項目結構的關系 | 文件在項目中起著重要作用,配置文件、資源文件、日志文件、緩存文件等都與項目的功能相關。文件管理用于操作這些文件,關系到項目的正確運行與健壯性。|
| 實施關鍵流程 | 1. 創建File對象指定文件路徑。2. 使用File類方法判斷文件/文件夾、創建、刪除、重命名等。3. 列出文件夾內容或過濾某類型文件。4. 獲取文件大小、最后修改時間等信息。5. 使用IO流讀取與寫入文件內容。6. 處理異常情況。 |
### 下面結合代碼示例詳細說明文件管理的實施關鍵流程:
#### 1. 創建File對象:
```
File file = new File("text.txt");
```
#### 2. 文件操作:
```
// 創建文件
file.createNewFile();
// 刪除文件
file.delete();
// 重命名
file.renameTo(new File("text_new.txt"));
```
#### 3. 列出文件夾內容:
```
File folder = new File("folder");
File[] files = folder.listFiles();
```
#### 4. 獲取文件信息:
```
// 文件大小
file.length();
// 最后修改時間
file.lastModified();
```
#### 5. 讀取與寫入文件:
```
// 讀取
FileInputStream fis = new FileInputStream(file);
// 寫入
FileOutputStream fos = new FileOutputStream(file);
```
#### 6. 處理異常:
```
try {
// 文件操作代碼
} catch (IOException e) {
e.printStackTrace();
}
```
## 4.3 文件管理列表方法
### 文件基礎操作
| 方法 | 描述 |
| --- | --- |
| exists() | 判斷文件是否存在。 |
| canRead() | 判斷文件是否可讀。 |
| canWrite() | 判斷文件是否可寫。 |
| isFile() | 判斷是否為文件。 |
| isDirectory() | 判斷是否為目錄。 |
| createNewFile() | 創建新文件。 |
| delete() | 刪除文件或目錄。 |
| mkdir() | 創建新目錄。 |
| list() | 返回目錄中的文件和目錄的名稱數組。 |
| listFiles() | 返回目錄中的文件和目錄的 File 對象數組。 |
| length() | 返回文件的長度(字節數)。 |
| lastModified() | 返回文件的最后修改時間。 |
### 字節流操作
| 方法 | 描述 |
| --- | --- |
| FileInputStream 類方法 | |
| read() | 從輸入流中讀取一個字節。 |
| read(byte\[\] b) | 從輸入流中讀取一定數量的字節到緩沖區。 |
| read(byte\[\] b, int off, int len) | 從輸入流中讀取指定數量的字節到緩沖區的指定位置。 |
| skip(long n) | 跳過輸入流中的指定字節數。 |
| close() | 關閉輸入流。 |
| FileOutputStream 類方法 | |
| write(int b) | 將一個字節寫入輸出流。 |
| write(byte\[\] b) | 將字節數組寫入輸出流。 |
| write(byte\[\] b, int off, int len) | 將字節數組的一部分寫入輸出流。 |
| flush() | 刷新輸出流。 |
| close() | 關閉輸出流。 |
### 緩沖流操作
| 方法 | 描述 |
| --- | --- |
| BufferedInputStream 類方法 | |
| read() | 從緩沖輸入流中讀取一個字節。 |
| read(byte\[\] b) | 從緩沖輸入流中讀取一定數量的字節到緩沖區。 |
| read(byte\[\] b, int off, int len) | 從緩沖輸入流中讀取指定數量的字節到緩沖區的指定位置。 |
| skip(long n) | 跳過緩沖輸入流中的指定字節數。 |
| mark(int readlimit) | 在當前緩沖輸入流位置設置標記。 |
| reset() | 將緩沖輸入流位置重置為最近的標記。 |
| available() | 返回緩沖輸入流中可用的字節數。 |
| close() | 關閉緩沖輸入流。 |
| BufferedOutputStream 類方法 | |
| write(int b) | 將一個字節寫入緩沖輸出流。 |
| write(byte\[\] b) | 將字節數組寫入緩沖輸出流。 |
| write(byte\[\] b, int off, int len) | 將字節數組的一部分寫入緩沖輸出流。 |
| flush() | 刷新緩沖輸出流。 |
| close() | 關閉緩沖輸出流。 |
### 字符流操作
| 方法 | 描述 |
| --- | --- |
| FileReader 類方法 | |
| read() | 從輸入流中讀取一個字符。 |
| read(char\[\] cbuf) | 從輸入流中讀取一定數量的字符到字符數組。 |
| read(char\[\] cbuf, int off, int len) | 從輸入流中讀取指定數量的字符到字符數組的指定位置。 |
| skip(long n) | 跳過輸入流中的指定字符數。 |
| close() | 關閉輸入流。 |
| FileWriter 類方法 | write(int c) |
| write(char\[\] cbuf) | 將字符數組寫入輸出流。 |
| write(char\[\] cbuf, int off, int len) | 將字符數組的一部分寫入輸出流。 |
| write(String str) | 將字符串寫入輸出流。 |
| write(String str, int off, int len) | 將字符串的一部分寫入輸出流。 |
| flush() | 刷新輸出流。 |
| close() | 關閉輸出流。 |
### Java NIO 操作
| 方法 | 描述 |
| --- | --- |
| java.nio.file 包 | |
| Files 類方法 | |
| readAllBytes(Path path) | 讀取文件的所有字節。 |
| readAllLines(Path path) | 讀取文件的所有行。 |
| write(Path path, byte\[\] bytes, OpenOption... options) | 將字節數組寫入文件。 |
| write(Path path, Iterable lines, Charset cs, OpenOption... options) | 將行寫入文件。 |
| copy(Path source,Path target,CopyOption... options) | 將文件從源路徑復制到目標路徑。 |
| move(Path source, Path target, CopyOption... options) | 將文件從源路徑移動到目標路徑。 |
| delete(Path path, DeleteOption... options) | 刪除指定路徑的文件或目錄。 |
| createDirectories(Path dir, FileAttribute... attrs) | 創建多層目錄。 |
| createFile(Path path, FileAttribute... attrs) | 創建新文件。 |
| getAttribute(Path path, String attribute, LinkOption... options) | 獲取指定文件屬性。 |
| setAttribute(Path path,String attribute, Object value,LinkOption... options) | 設置指定文件屬性。 |
| newInputStream(Path path,OpenOption... options) | 返回一個輸入流以讀取文件。 |
| newOutputStream(Path path, OpenOption... options) | 返回一個輸出流以寫入文件。 |
| newBufferedReader(Path path,Charset cs) | 返回一個緩沖字符輸入流以讀取文件。 |
| newBufferedWriter(Path path, Charset cs, OpenOption... options) | 返回一個緩沖字符輸出流以寫入文件。 |
- 系統設計
- 需求分析
- 概要設計
- 詳細設計
- 邏輯模型設計
- 物理模型設計
- 產品設計
- 數據驅動產品設計
- 首頁
- 邏輯理解
- 微服務架構的關系數據庫優化
- Java基礎架構
- 編程范式
- 面向對象編程【模擬現實】
- 泛型編程【參數化】
- 函數式編程
- 響應式編程【異步流】
- 并發編程【多線程】
- 面向切面編程【代碼復用解耦】
- 聲明式編程【注解和配置】
- 函數響應式編程
- 語法基礎
- 包、接口、類、對象和切面案例代碼
- Springboot按以下步驟面向切面設計程序
- 關鍵詞
- 內部類、匿名類
- 數組、字符串、I/O
- 常用API
- 并發包
- XML
- Maven 包管理
- Pom.xml
- 技術框架
- SpringBoot
- 項目文件目錄
- Vue
- Vue項目文件目錄
- 遠程組件
- 敏捷開發前端應用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 腳本機制
- 編譯器API
- 注釋
- 源碼級注釋
- Javadoc
- 安全
- Swing和圖形化編程
- 國際化
- 精實或精益
- 精實軟件數據庫設計
- 精實的原理與方法
- 項目
- 零售軟件
- 擴展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服務
- 1004_微服務數據模型范式
- 1005_數據模型
- 1006_springCloud
- AI 流程圖生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和幫助函數
- WooCommerce的鉤子和過濾器
- REST API
- 數據庫API
- 模板系統
- 數據模型
- 1.Woo主題開發流程
- Filter
- Hook
- 可視編輯區域的函數工具
- 渲染字段函數
- 類庫和框架
- TDD 通過測試來驅動開發
- 編程范式對WordPress開發
- WordPress和WooCommerce的核心代碼類庫組成
- 數據庫修改
- 1.WP主題開發流程與時間規劃
- moho
- Note 1
- 基礎命令