Java io



Java基础笔记 – 字符流分类详细介绍和各种字符流类介绍与使用 字符集
Java基础笔记 – 字符流分类详细介绍和各种字符流类介绍与使用 字符集1、字符流:

字节流不能操作Unicode字符,由于Java采用16位的Unicode字符,即一个字符占16位,所以要使用基于字符的输入输出操作。所以创造了字符流,以提供直接的字符输入输出的支持。

2、字符流类的层次结构:
2.1、输入流的类层次结构:

2.2、输出流的类层次结构

3、字符流的顶层抽象类:

Reader和Writer。

public abstract class  Reader
extends Object
implements Readable, Closeable

用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

public abstract class  Writer
extends Object
implements Appendable, Closeable, Flushable

写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

4、java.io包中用于处理字符流的基本类InputStreamReader和OutputStreamWriter:

InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

4.1、InputStreamReader主要构造方法:
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
4.2、OutputStreamWriter主要构造方法:
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
5、字符流的使用例子:
5.1、下面使用了一些常用的字符流对象实现文件的输出和输入:
public static void main(String[] args) throws IOException {

    //创建文件字节输出流
    FileOutputStream fos = new FileOutputStream("D:/itzhai/arthinking.txt");
    //把字节输出流转换成字符输出流,并使用了BufferedWriter提供缓冲功能
    BufferedWriter bw = new BufferedWriter(
            new OutputStreamWriter(fos));
    bw.write("arthinking");
    bw.close();

    //创建文件字节输入流
    FileInputStream fis = new FileInputStream("D:/itzhai/arthinking.txt");
    //把字节输入流转换成字符输入流,并使用了BufferedReader提供缓冲功能
    BufferedReader br = new BufferedReader(
            new InputStreamReader(fis));
    String str = br.readLine();
    while(null != str){
        System.out.println(str);
        str = br.readLine();
    }
    br.close();
}
5.2、下面把标准的输入流封装成字符流并添加缓冲功能:

标准的输出流和标准的输入流是字节流:

static InputStream
in
“标准”输入流。
static PrintStream
out
“标准”输出流。
public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(
            new InputStreamReader(System.in));
    String str;
    while(null != (str = br.readLine())){
        System.out.println(str);
    }
}
5.3、FileReader和FileWriter的使用:
public class  FileReader
extends InputStreamReader

用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。

public class  FileWriter
extends OutputStreamWriter

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

文件是否可用或是否可以被创建取决于底层平台。特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。

使用FileReader和FileWriter读取文件和写出文件:
public static void main(String[] args) throws IOException {

    String str = "hello world!!!";
    //创建字符数组并初始化
    char[] buffer = new char[str.length()];
    str.getChars(0, str.length(), buffer, 0);
    //创建FileWriter
    FileWriter fw = new FileWriter("D:/itzhai/arthinking.txt");
    //逐个字符的输出到文件
    for(int i=0; i<buffer.length; i++){
        fw.write(buffer[i]);
    }
    fw.close();

    //创建FileReader
    BufferedReader br = new BufferedReader(
            new FileReader("D:/itzhai/arthinking.txt"));
    //使用BufferedReader提供的逐行读取函数读取文件
    while(null != (str = br.readLine())){
        System.out.println(str);
    }
    br.close();
}
5.4、CharArrayReader和CharArrayWriter的使用
public class  CharArrayReader
extends Reader

此类实现一个可用作字符输入流的字符缓冲区。

public class  CharArrayWriter
extends Writer

此类实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。可使用 toCharArray() 和 toString() 获取数据。

注:在此类上调用 close() 无效,并且在关闭该流后可以调用此类中的各个方法,而不会产生任何 IOException。

下面使用CharArrayReader读取字符数组:
public static void main(String[] args) throws IOException {

    String str = "arthinking";
    //创建并初始化字符数组
    char[] ch = new char[str.length()];
    str.getChars(0, str.length(), ch, 0);

    //通过字符数组初始化字符数组输入流
    CharArrayReader cr = new CharArrayReader(ch);

    int c;
    while(-1 != (c = cr.read())){
        System.out.print((char)c);
    }
}
5.5、RandomAccessFile的使用:
public class  RandomAccessFile
extends Object
implements DataOutput, DataInput, Closeable

此类的实例既可以支持对随机访问文件的读取也可以支持对其写入。

随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。

public static void main(String[] args) throws IOException {

    //创建随机访问文件
    RandomAccessFile raf = new RandomAccessFile("D:/itzhai/arthinking.txt", "rw");
    //写入数据
    raf.writeInt(1);
    raf.writeChar('a');
    //文件指针复位
    raf.seek(0);
    //输出数据
    System.out.println(raf.readInt() + "" + raf.readChar());
}
6、字符集编码介绍:
ASCII:

它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。可显示字符:英文大小写字符、阿拉伯数字和西文符号。

ISO-8859-1:

是四方国家所使用的编码机,单字节的字符集。

GB2312:

GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

GBK:

除了完全兼容GB2312之外,还对繁体中文,不常用汉字和特殊符号进行了编码。

UTF-8:

UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。

UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

Unicode:

一种通用字符集,每个字符都用2个字节来表示,对于英文字符采用前面补0的方法实现等长兼容。

本文由包小卷发表于3年前 |  Java基础 |  暂无评论 |   被围观 3,465 views+
1、字符流:

字节流不能操作Unicode字符,由于Java采用16位的Unicode字符,即一个字符占16位,所以要使用基于字符的输入输出操作。所以创造了字符流,以提供直接的字符输入输出的支持。

2、字符流类的层次结构:
2.1、输入流的类层次结构:

2.2、输出流的类层次结构

3、字符流的顶层抽象类:

Reader和Writer。

public abstract class  Reader
extends Object
implements Readable, Closeable

用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

public abstract class  Writer
extends Object
implements Appendable, Closeable, Flushable

写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

4、java.io包中用于处理字符流的基本类InputStreamReader和OutputStreamWriter:

InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

4.1、InputStreamReader主要构造方法:
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
4.2、OutputStreamWriter主要构造方法:
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
5、字符流的使用例子:
5.1、下面使用了一些常用的字符流对象实现文件的输出和输入:
public static void main(String[] args) throws IOException {

    //创建文件字节输出流
    FileOutputStream fos = new FileOutputStream("D:/itzhai/arthinking.txt");
    //把字节输出流转换成字符输出流,并使用了BufferedWriter提供缓冲功能
    BufferedWriter bw = new BufferedWriter(
            new OutputStreamWriter(fos));
    bw.write("arthinking");
    bw.close();

    //创建文件字节输入流
    FileInputStream fis = new FileInputStream("D:/itzhai/arthinking.txt");
    //把字节输入流转换成字符输入流,并使用了BufferedReader提供缓冲功能
    BufferedReader br = new BufferedReader(
            new InputStreamReader(fis));
    String str = br.readLine();
    while(null != str){
        System.out.println(str);
        str = br.readLine();
    }
    br.close();
}
5.2、下面把标准的输入流封装成字符流并添加缓冲功能:

标准的输出流和标准的输入流是字节流:

static InputStream
in
“标准”输入流。
static PrintStream
out
“标准”输出流。
public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(
            new InputStreamReader(System.in));
    String str;
    while(null != (str = br.readLine())){
        System.out.println(str);
    }
}
5.3、FileReader和FileWriter的使用:
public class  FileReader
extends InputStreamReader

用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。

public class  FileWriter
extends OutputStreamWriter

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

文件是否可用或是否可以被创建取决于底层平台。特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。

使用FileReader和FileWriter读取文件和写出文件:
public static void main(String[] args) throws IOException {

    String str = "hello world!!!";
    //创建字符数组并初始化
    char[] buffer = new char[str.length()];
    str.getChars(0, str.length(), buffer, 0);
    //创建FileWriter
    FileWriter fw = new FileWriter("D:/itzhai/arthinking.txt");
    //逐个字符的输出到文件
    for(int i=0; i<buffer.length; i++){
        fw.write(buffer[i]);
    }
    fw.close();

    //创建FileReader
    BufferedReader br = new BufferedReader(
            new FileReader("D:/itzhai/arthinking.txt"));
    //使用BufferedReader提供的逐行读取函数读取文件
    while(null != (str = br.readLine())){
        System.out.println(str);
    }
    br.close();
}
5.4、CharArrayReader和CharArrayWriter的使用
public class  CharArrayReader
extends Reader

此类实现一个可用作字符输入流的字符缓冲区。

public class  CharArrayWriter
extends Writer

此类实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。可使用 toCharArray() 和 toString() 获取数据。

注:在此类上调用 close() 无效,并且在关闭该流后可以调用此类中的各个方法,而不会产生任何 IOException。

下面使用CharArrayReader读取字符数组:
public static void main(String[] args) throws IOException {

    String str = "arthinking";
    //创建并初始化字符数组
    char[] ch = new char[str.length()];
    str.getChars(0, str.length(), ch, 0);

    //通过字符数组初始化字符数组输入流
    CharArrayReader cr = new CharArrayReader(ch);

    int c;
    while(-1 != (c = cr.read())){
        System.out.print((char)c);
    }
}
5.5、RandomAccessFile的使用:
public class  RandomAccessFile
extends Object
implements DataOutput, DataInput, Closeable

此类的实例既可以支持对随机访问文件的读取也可以支持对其写入。

随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。

public static void main(String[] args) throws IOException {

    //创建随机访问文件
    RandomAccessFile raf = new RandomAccessFile("D:/itzhai/arthinking.txt", "rw");
    //写入数据
    raf.writeInt(1);
    raf.writeChar('a');
    //文件指针复位
    raf.seek(0);
    //输出数据
    System.out.println(raf.readInt() + "" + raf.readChar());
}
6、字符集编码介绍:
ASCII:

它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。可显示字符:英文大小写字符、阿拉伯数字和西文符号。

ISO-8859-1:

是四方国家所使用的编码机,单字节的字符集。

GB2312:

GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

GBK:

除了完全兼容GB2312之外,还对繁体中文,不常用汉字和特殊符号进行了编码。

UTF-8:

UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。

UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

Unicode:

一种通用字符集,每个字符都用2个字节来表示,对于英文字符采用前面补0的方法实现等长兼容。

03-21
<think>好的,我现在需要处理用户关于Java IO的问题。用户希望了解Java IO的概念或者解决相关问题,特别是询问教程和故障排除的方法。首先,我得回顾一下Java IO的基础知识,确保自己理解正确,然后组织回答的结构。 首先,Java IO主要涉及输入输出流,用于处理数据的读写。核心包是java.io,里面有很多类,比如File、InputStream、OutputStream、Reader、Writer等。用户可能需要知道这些类的层次结构和使用方法。 接下来,常见的IO操作包括文件读写、网络通信、序列化等。比如,FileInputStream和FileOutputStream用于字节流,而FileReader和FileWriter用于字符流。缓冲流(BufferedInputStream等)可以提高效率,这部分应该提到。 然后,异常处理是Java IO中很重要的一部分,比如IOException,需要正确处理try-with-resources来自动关闭流,避免资源泄漏。这部分用户可能在故障排除时会遇到问题,比如未正确关闭流导致文件锁定或资源耗尽。 关于教程,Oracle的官方文档是权威资源,应该引用。比如引用[3]提到了JSP的信息,但用户需要的是IO的教程,可能需要检查是否有其他引用相关。不过用户给出的引用中,引用[1]是关于JDK 7的故障排除工具,可能和调试IO问题相关,比如使用jdb进行调试。引用[5]提到字节码信息,可能和IO关系不大,但故障排除时可能需要查看异常堆栈,这可能涉及字节码或类加载的问题。 对于故障排除,常见问题包括文件路径错误、权限问题、字符编码不一致导致的乱码,或者流未正确关闭。比如,文件找不到可能是因为相对路径的当前工作目录与预期不符,或者文件被其他进程占用。这时候需要检查路径是否正确,是否有读取权限,使用绝对路径测试,或者使用工具如Process Explorer查看文件句柄。 此外,NIO(New IO)在Java 1.4引入,提供了非阻塞IO和通道等高效处理方式,用户可能也需要了解NIO和传统IO的区别,比如使用Channel和Buffer的方式,或者使用Files类简化操作。 在组织回答时,需要分步骤讲解,比如先介绍核心概念,然后常见操作,接着是故障排除技巧,最后提供学习资源和相关工具。同时,生成的问题要围绕Java IO的进一步学习,比如NIO、性能优化、常见异常处理等。 需要确保回答中的LaTeX格式正确,比如类名和方法名可能需要用代码块,而数学表达式则用$...$。例如,文件路径的转义可能需要讨论,比如在字符串中使用反斜杠需要转义,写成`"C:\\\\path\\\\to\\\\file"`,但这里可能不需要数学表达式,所以可能不需要用到LaTeX的公式部分。 检查用户提供的引用,是否有与IO相关的资源。引用[4]是关于安卓USB驱动的,可能不相关。引用[2]关于反射,可能也不直接相关,但故障排除时可能会用到反射来检查类路径或资源加载,这可能间接相关,但可能不需要特别提到。 总结回答结构: 1. Java IO核心概念:流、字节流与字符流、缓冲流、NIO。 2. 常见操作:文件读写示例代码。 3. 故障排除:常见问题及解决方法,如路径、权限、编码、资源泄漏。 4. 学习资源:官方教程、工具(如jdb)。 5. 相关问题:如何选择IO和NIO,处理大文件,字符编码问题,关闭资源方法,常见异常处理。 需要确保回答中的引用正确,比如引用[1]关于JDK工具,可能在故障排除时使用jdb或者jstack等工具分析问题,可以提到。引用[3]的链接虽然是JSP,但Oracle的Java EE教程可能包含IO相关内容,需要检查链接是否有效,但用户提供的链接可能已失效,需要注意。不过用户给出的引用可能有误,比如引用[3]的网址是javaee.github.io,可能是正确的,但需要确认是否有IO相关部分。 最后,代码示例需要正确,比如使用try-with-resources来读取文件,展示正确的异常处理方式。同时,确保所有技术术语准确,例如InputStreamReader处理字符编码,BufferedReader提高读取效率。 可能的问题点:用户提供的引用中是否有直接关于Java IO的内容?引用[1]提到JDK工具,可以用于调试IO问题,比如使用jdb调试应用程序,或者在出现IO异常时分析线程状态。引用[5]关于字节码信息,可能与IO问题关系不大,但类加载时找不到资源文件可能会涉及,需要看具体情况。 因此,在故障排除部分,可以建议使用JDK工具如jstack检查是否有线程阻塞在IO操作,或者使用jdb进行调试,引用[1]。同时,处理资源泄漏时,可以使用try-with-resources来自动关闭流,这是Java 7的特性,可能需要提到。 综上所述,回答的结构应该是先介绍核心概念,然后示例代码,接着故障排除步骤,引用相关资源,最后生成相关问题。</think>### Java IO 概念与问题排查指南 #### 一、核心概念 Java IO(输入输出)用于处理数据读写,核心包为 `java.io`,主要分为两类: 1. **字节流**:处理二进制数据,基类为 `InputStream` 和 `OutputStream`,例如 `FileInputStream` 和 `BufferedOutputStream`。 2. **字符流**:处理文本数据,基类为 `Reader` 和 `Writer`,例如 `FileReader` 和 `BufferedWriter`。 3. **NIO(New IO)**:Java 1.4 引入,通过 `Channel` 和 `Buffer` 实现高效非阻塞操作,例如 `Files.readAllLines()`[^1]。 #### 二、常见操作示例 1. **文件读取(字符流)**: ```java try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } ``` 2. **文件写入(字节流)**: ```java try (OutputStream out = new BufferedOutputStream(new FileOutputStream("output.dat"))) { out.write("Hello".getBytes()); } catch (IOException e) { e.printStackTrace(); } ``` #### 三、故障排查技巧 1. **文件路径问题** - 使用绝对路径或检查工作目录:`System.getProperty("user.dir")`。 - 路径分隔符兼容性:使用 `File.separator` 替代硬编码的 `/` 或 `\`。 2. **权限与资源占用** - 确认文件可读/写:`file.canRead()` 和 `file.canWrite()`。 - 确保流正确关闭:使用 **try-with-resources**(Java 7+)避免资源泄漏。 3. **字符编码问题** - 指定编码格式:例如 `new InputStreamReader(new FileInputStream("file.txt"), StandardCharsets.UTF_8)`。 4. **调试工具** - 使用 `jdb`(Java Debugger)追踪 IO 异常堆栈[^1]。 - 通过 `jstack` 分析线程阻塞(如网络 IO 超时)。 #### 四、学习资源 1. **官方教程** - [Oracle Java IO 教程](https://docs.oracle.com/javase/tutorial/essential/io/)(涵盖基础与 NIO)。 2. **进阶内容** - Java NIO.2(Java 7+)的 `Path` 和 `Files` 类[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值