您的位置:

JavaIO基础知识

Java IO(Input/Output)是Java中用来处理输入/输出的一套API,它可以帮助我们完成文件读写、网络传输等操作。学习 Java I/O 是 Java 开发者的必修课程。在本篇文章中我们将介绍基础的 Java IO 知识,并通过代码示例来演示它们的使用。

一、Java IO 的基本概念

Java 的 IO 流通常被分为两个大类:字节流和字符流。字节流和字符流的区别在于它们处理的数据单位不同。字节流以字节为单位进行读写操作,而字符流则以字符为单位进行读写操作。

Java IO 里最基本的类是java.io中的 InputStream 和 OutputStream。InputStream 和 OutputStream 是所有字节流的父类,提供了最基本的读写方法。

除了 InputStream 和 OutputStream,Java 还提供了字符流,其基本类是java.io中的 Reader 和 Writer。

二、Java IO 流的分类

Java IO 流分为四大类:字节输入流、字节输出流、字符输入流和字符输出流。四个类都是抽象类,不能直接使用。要实现读写操作需借助其子类类。

1. 字节输入流

字节输入流可以从文件或者其它数据源中读取字节数据,最基本的字节输入流是 InputStream。

    try(InputStream inputStream = new FileInputStream("example.txt")) {
        int data = inputStream.read();
        while(data != -1) {
            System.out.println(data);
            data inputStream.read();
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码中,首先通过FileInputStream打开文件example.txt,然后通过read()方法一次一个字节地读取文件内容。当read()方法返回-1时,表示文件已经读取完毕,循环结束。

2. 字节输出流

字节输出流将数据以字节的方式写入文件或其它输出目的地中,最基本的字节输出流是 OutStream。

    try(OutputStream outputStream = new FileOutputStream("example.txt")) {
        byte[] data = "Hello World".getBytes();
        outputStream.write(data);
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码首先通过FileOutStream打开文件 example.txt,然后将“Hello World”转换为字节数组,并使用write()方法将它们写入文件中。

3. 字符输入流

Java 中的字符流比较常用,最基本的字符输入流是 Reader。

    try(Reader reader = new FileReader("example.txt")) {
        int data = reader.read();
        while(data != -1) {
            System.out.printf("%c", data);
            data = reader.read();
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码中,首先使用FileReader打开文件 example.txt,然后通过read()方法一次一个字符地读取文件内容。当read()方法返回-1时,表示文件已经读取完毕,循环结束。

4. 字符输出流

Java 中的字符输出流也比较常用,最基本的字符输出流是 Writer。

    try(Writer writer = new FileWriter("example.txt")) {
        String data = "Hello World";
        writer.write(data);
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码首先通过FileWrite打开文件 example.txt,然后将“Hello World”写入文件中。

三、Java IO 流的操作

Java IO 流提供了各种不同的方法,可以通过它们实现不同的IO读写操作。

1. 文件操作

Java 的File类提供了访问文件系统的方法,可以对文件和目录进行访问和操作。

    File file = new File("example.txt");
    if(file.exists()) {
        System.out.println("文件存在");
    } else {
        System.out.println("文件不存在");
    }

以上代码使用Java内置的File对象来检查文件是否存在。如果文件存在,则输出“文件存在”,否则输出“文件不存在”。

2. 缓存操作

缓存操作可以提高IO读写效率。Java IO 中的缓存类有BufferedReader、BufferedWriter、ByteArrayInputStream等。其中,Java 8 中已经提供了NIO类库,NIO类库相比IO类库有更高的效率和更强的扩展性。

    try(BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
        String data = null;
        while((data = reader.readLine()) != null) {
            System.out.println(data);
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码中,首先使用BufferedReader类对FileReader类进行了包装,生成了一个字符输入流。然后通过readLine()方法逐行读取了文件内容,并输出到控制台上。

3. 字节流操作

字节流操作可以对字节进行操作。Java IO中的字节流有ByteArrayInputStream、ByteArrayOutputStream、FileInputStream等。

    try(FileInputStream inputStream = new FileInputStream("example.txt")) {
        byte[] data = new byte[1024];
        int len = 0;
        while((len = inputStream.read(data)) != -1) {
            System.out.println(new String(data, 0, len));
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码首先通过FileInputStream类对文件进行读取操作。然后使用read()方法逐个读取文件内容,数据被缓存到 data 数组中。最后将读取到的数据以字符串方式输出到控制台上。

4. 字符流操作

字符流操作可以对字符进行操作,常用的字符流有FileReader、FileWriter等。

    try(FileReader reader = new FileReader("example.txt")) {
        char[] data = new char[1024];
        int len = 0;
        while((len = reader.read(data)) != -1) {
            System.out.println(new String(data, 0, len));
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

以上代码首先通过FileReader类对文件进行读取操作。然后使用read()方法逐个读取文件内容,数据被缓存到 data 数组中。最后将读取到的数据以字符串方式输出到控制台上。

四、总结

本文从Java IO 的基本概念、分类、操作等多个方面详细讲解了Java IO的基础知识,并通过代码示例展示了它们的具体使用。希望本文能够帮助读者了解Java IO,并更好地运用Java IO来完成自己的项目。