Java高级io流

Java中的IO流是指输入/输出流(Input/Output Stream)的操作。IO流用于处理文件的输入和输出,以及网络通信等输入输出操作。Java IO流分为字节流和字符流两种类型,其中字节流用于处理二进制数据,而字符流用于处理文本数据。

Java中的IO流分为四种类型:

  1. 字节流(byte stream):用于读写二进制数据,如InputStream和OutputStream。

  2. 字符流(character stream):用于读写文本数据,如Reader和Writer。

  3. 缓冲流(buffered stream):用于提高IO性能的缓冲区,如BufferedReader和BufferedWriter。

  4. 对象流(object stream):用于读写Java对象,如ObjectInputStream和ObjectOutputStream。

Java IO流的基本操作包括打开流、写入数据、读取数据和关闭流等,具体使用方法可以参考Java官方文档或相关教程。

File类

File类是Java IO包中的一个类,用于处理与文件系统的交互。它提供了一种跨平台的方式来处理文件和目录。

File类可以用来创建、删除、重命名和获取文件或目录的信息。它还可以用来查找文件和目录,以及遍历目录和文件。此外,File类还可以检查文件或目录是否存在,并确定文件或目录的大小、最后修改时间等属性信息。

在Java中,File类很常用,例如在文件复制、文件读写、文件移动、文件过滤等情况下都需要用到File类。

File类常用方法

下面列举了一些常用的Java File类的方法:

1.构造方法:

  • File(String pathname):根据给定的路径名创建一个新File实例。
  • File(String parent, String child):根据给定的父路径和子路径名创建一个新File实例。
  • File(File parent, String child):根据给定的父路径和子路径名创建一个新File实例。

2.获取文件信息:

  • getName():返回文件或目录的名称。
  • getPath():返回文件或目录的路径。
  • getAbsolutePath():返回文件或目录的绝对路径。
  • getParent():返回文件或目录的父目录路径。
  • isFile():判断当前File实例是否为一个文件,是返回true,否则返回false。
  • isDirectory():判断当前File实例是否为一个目录,是返回true,否则返回false。
  • length():返回文件的大小。

3.操作文件:

  • exists():判断当前File实例对应的文件或目录是否存在,存在返回true,否则返回false。
  • createNewFile():创建一个新文件。
  • mkdir():创建一个目录。
  • mkdirs():创建一个多级目录。
  • delete():删除当前File实例对应的文件或目录。

4.遍历目录:

  • list():返回当前目录下所有文件和目录的名称数组。
  • listFiles():返回当前目录下所有文件和目录对应的File对象数组。
  • list(FilenameFilter filter):返回当前目录下符合指定过滤器条件的所有文件和目录的名称数组。
  • listFiles(FileFilter filter):返回当前目录下符合指定过滤器条件的所有文件和目录对应的File对象数组。

这些方法仅为常用方法的一部分,File类还有很多其他方法,可以根据具体需要进行调用。

字节输出/输入流

Java字节输出流和输入流是Java IO API中的两个基本类,用于读取和写入二进制数据。这两个类都是抽象类,通常使用子类来实现具体的功能。

字节输出流用于向输出设备(如文件、网络套接字等)写入二进制数据。常用的字节输出流包括FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。

常用的字节输出流方法包括:

  • write(int b):将一个字节写入输出流。
  • write(byte[] b):将b中的所有字节写入输出流。
  • write(byte[] b, int off, int len):将b中从off开始的len个字节写入输出流。
  • flush():强制清空缓冲区并输出所有数据。
  • close():关闭输出流。

字节输入流用于从输入设备(如文件、网络套接字等)读取二进制数据。常用的字节输入流包括FileInputStream、ByteArrayInputStream、PipedInputStream等。

常用的字节输入流方法包括:

  • read():读取一个字节并返回,如果到达输入流的末尾,则返回-1。
  • read(byte[] b):读取尽可能多的字节并将它们存储在给定的字节数组中,返回读取的字节数,如果到达输入流的末尾,则返回-1。
  • read(byte[] b, int off, int len):从输入流中读取len个字节到给定的数组中,从数组中的off位置开始存储,返回读取的字节数,如果到达输入流的末尾,则返回-1。
  • available():返回输入流中可以读取的字节数。
  • close():关闭输入流。

需要注意的是,Java字节输入流和输出流会自动进行缓冲,以提高效率。当关闭流或调用flush()方法时,缓冲区中的数据会被写入目标设备或从输入流中读取。在编写程序时,需要根据需要手动设置缓冲区大小,以充分利用缓冲机制。

文件复制

Java文件复制可以通过字节输入/输出流实现。以下是一个简单的示例代码:

import java.io.*;

public class FileCopyExample {
    public static void main(String[] args) {
        File sourceFile = new File("sourceFile.txt");
        File targetFile = new File("targetFile.txt");

        try (
            InputStream in = new FileInputStream(sourceFile);
            OutputStream out = new FileOutputStream(targetFile);
        ) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }
            System.out.println("File Copied Successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代码将源文件“sourceFile.txt”复制到目标文件“targetFile.txt”,使用了try-with-resources语句确保流的正确关闭。在循环读取和写入文件内容时,使用了缓冲区的方法,可以提高文件复制效率。

字符输入/输出流

Java提供了两种类型的字符流:字符输入流和字符输出流。字符输入流用于读取文本文件中的字符,而字符输出流用于将字符写入文本文件中。

Java字符输入流的主要类是Reader,它是一个抽象类,不能直接使用,需要使用其子类,例如FileReader,它可以从指定文件中读取字符。

Java字符输出流的主要类是Writer,它也是一个抽象类,不能直接使用,需要使用其子类,例如FileWriter,它可以将字符写入指定的文件中。

以下是一个简单的Java字符输入/输出流示例,从一个文本文件中读取字符并将它们写入另一个文本文件中:

import java.io.*;

public class CharStreamExample {
    public static void main(String[] args) {
        File inputFile = new File("input.txt");
        File outputFile = new File("output.txt");

        try (
            FileReader reader = new FileReader(inputFile);
            FileWriter writer = new FileWriter(outputFile);
        ) {
            int c;
            while ((c = reader.read()) != -1) {
                writer.write(c);
            }
            System.out.println("Characters Copied Successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,FileReader类用于读取input.txt文件,而FileWriter类用于将字符写入output.txt文件。使用while循环从输入文件中读取每个字符,然后将其写入输出文件中。最后,输出一条消息表明字符已成功复制。

字符缓冲输入/输出流

Java提供了两种字符缓冲输入/输出流:BufferedReader和BufferedWriter。

BufferedReader: 用于读取输入流中的字符数据。它在Java中的定义如下:

public class BufferedReader extends Reader {
    ...
}

BufferedWriter: 用于写入输出流中的字符数据。它在Java中的定义如下:

public class BufferedWriter extends Writer {
    ...
}

以下是使用BufferedReader和BufferedWriter读取和写入文件的示例代码:

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String fileName = "input.txt";

        try {
            // 创建文件输入流
            FileReader fileReader = new FileReader(fileName);

            // 创建缓冲输入流
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            // 创建文件输出流
            FileWriter fileWriter = new FileWriter("output.txt");

            // 创建缓冲输出流
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

            // 读取文件内容并写入新文件
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                bufferedWriter.write(line);
                bufferedWriter.newLine();
            }

            // 关闭输入输出流
            bufferedReader.close();
            bufferedWriter.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,首先我们定义了要读取的文件名。然后,我们创建一个文件输入流,将其传递给一个缓冲输入流。接下来,我们创建一个新的文件输出流和一个缓冲输出流,以便我们可以将读取的文件内容写入新文件。最后,我们读取文件内容,写入新文件,然后关闭输入输出流。

请注意,我们使用了bufferedReader.readLine()方法来读取文件内容。此方法返回文件中的一行文本,并在读取完每行文本后自动将文件指针移动到下一行的开头。因此,我们可以使用bufferedWriter.write()方法来将读取的文本写入新文件,并使用bufferedWriter.newLine()方法将文件指针移动到新的一行。

在写入完文件后,我们关闭输入输出流以释放资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值