java基础2024(6.I/O)

Java I/O(输入/输出)是指Java程序与外部世界进行通信的过程。这通常涉及从文件、网络连接、控制台等读取数据以及向这些源写入数据。

1.File

File类是 java.io包中的一个重要类,它表示文件或目录路径名的抽象表示。File类提供了多种方法来操作文件和目录,包括创建、删除、重命名、检查文件属性等,但不直接提供文件内容的读写操作。

1. 文件和目录路径名的表示

File类可以表示一个实际的文件路径或一个目录路径。以下是创建 File对象的方式:

File file = new File("//文件路径");

在Java中,可以使用斜杠 / 或反斜杠 \ 作为路径分隔符,但在字符串中反斜杠需要转义。

File类提供了一系列方法来操作文件和目录, 还提供了检查文件属性的方法:

  1. createNewFile():在文件系统中创建一个新的空文件。
  2. mkdir():创建一个新的单级目录。
  3. delete():删除文件或目录。
  4. exists():检查文件或目录是否存在。
  5. isFile():检查是否是一个文件。
  6. isDirectory():检查是否是一个目录。
  7. getName():返回文件的名称。
  8. getPath():返回文件的路径。

示例:

这个例子展示了如何遍历指定目录下的所有文件和子目录,并打印它们的详细信息。

2.字节流

字节流是一种基本的 I/O 流,用于以字节为单位读取和写入数据。字节流是最基础的流类型,其他更高级的流(如字符流、对象流等)都是在字节流的基础上构建的。字节流不包含任何格式化的信息,它只是简单地按照字节顺序传输数据。

读写文件

字节流主要由两个抽象类InputStream和OutputStream来表示,它们分别用于读取和写入数据。

InputStream是一个抽象类,用于表示所有输入字节流的基础。
常用的子类有FileInputStream,它用于从文件系统中的文件读取数据。
读取文件时,可以逐字节读取,也可以将字节放入缓冲区中批量读取。


OutputStream同样是一个抽象类,用于表示所有输出字节流的基础。
常用的子类有FileOutputStream,它用于将数据写入文件系统中的文件。
写入文件时,可以逐字节写入,也可以使用缓冲区进行批量写入。

*普通的文件复制效率低下,可以将多个字符暂时装在一块(这被称为缓冲区),当运行时一起读取。

read():读操作

write():写操作

定义读取和写入:

FileInputStream in = new FileInputStream("//文件");
FileOutputStream out = new FileOutputStream("//文件");

以下是读取和写入的示例:

public class ByteStreamExample {
    public static void main(String[] args) throws IOException {
        // 读取文件
        FileInputStream in = new FileInputStream("//文件");
        int b;
        //读取到-1就退出while循环,也就是字符读完了
        while ((b = in.read()) != -1) {
            System.out.println(b);
        }
        in.close();

        // 写入文件
        FileOutputStream out = new FileOutputStream("//文件");
        String str = "Hello, World!";
        byte[] bArray = str.getBytes();
        out.write(bArray);
        out.close();
    }
}

*注意,读写操作需要抛出IOException,否则会报错。

字符流

字符流是基于字符的数据流,它处理的是16位的Unicode字符。与字节流不同,字符流能够自动处理字符编码和解码,这使得它在处理文本数据时更为方便和高效。字符流的核心是java.io.Reader和java.io.Writer两个抽象类。所有的字符流类都是这两个类的子类。

输入流

FileReader:用于从文件中读取字符数据。
BufferedReader:提供缓冲功能,可以一次读取一行数据,提高读取效率。
InputStreamReader:将字节流转换为字符流,可以指定字符编码。

输出流

FileWriter:用于向文件中写入字符数据。
BufferedWriter:提供缓冲功能,可以方便地写入一行数据,提高写入效率。
OutputStreamWriter:将字符流转换为字节流,可以指定字符编码。

特性:

字符编码:字符流能够处理字符编码问题,这使得在不同字符编码之间转换变得简单。
缓冲:使用BufferedReader和BufferedWriter可以提供缓冲功能,提高读写效率。
行处理:BufferedReader提供了readLine()方法,可以方便地按行读取文本数据,直接读取一排,例如下文。

BufferedReader读取文件的示例:

BufferedWriter writer = new BufferedWriter(new FileWriter("//文件"));
writer.write("第一行文本");
writer.newLine();
writer.write("第二行文本");
writer.close();

字符流是Java中处理文本数据的重要工具,提供了丰富的类和方法来方便地读取和写入字符数据。合理使用字符流可以有效地提高程序处理文本数据的效率。

持续更新中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值