💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[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) | 返回一个缓冲字符输出流以写入文件。 |