欢迎访问宙启技术站
智能推送

Java中的IO流函数解析及应用

发布时间:2023-06-01 09:26:57

Java IO(Input/Output)是指Java提供的输入/输出操作类,通常用于读写文件数据或网络数据等操作。在Java中,IO流分为字节流和字符流,字节流主要用于读写二进制文件,如音频、视频等文件,而字符流则用于读写文本文件,如txt、xml等文件。IO流分为两大类:字节流和字符流,由此引出了四个抽象类:InputStream、OutputStream、Reader、Writer。接下来我们就来一一解析这些抽象类及其常用的子类和方法。

一、字节流

1.字节流的抽象类

①InputStream:字节输入流的父类。

②OutputStream:字节输出流的父类。

2.字节流的常用子类

①FileInputStream:用于从文件读取数据的输入流。

②FileOutputStream:用于向文件写入数据的输出流。

③ByteArrayInputStream:将byte数组作为输入流的数据源。

④ByteArrayOutputStream:将byte数组作为输出流的数据源。

⑤DataInputStream:用于读取Java基本数据类型的输入流。

⑥DataOutputStream:用于写入Java基本数据类型的输出流。

⑦BufferedInputStream:带缓存的输入流,提高读写效率。

⑧BufferedOutputStream:带缓存的输出流,提高读写效率。

3.字节流的常用方法

①read():读取单个字节。

②read(byte[] b):读取一定数量的字节,存储到缓冲区b中。

③write(int b):将一个字节写入输出流。

④write(byte[] b):将缓冲区b中的所有字节写入输出流。

⑤flush():刷新此输出流并强制任何缓冲的输出字节被写出。

二、字符流

1.字符流的抽象类

①Reader:字符输入流的父类。

②Writer:字符输出流的父类。

2.字符流的常用子类

①FileReader:读取文件的字符流。

②FileWriter:将字符写入文件的字符流。

③InputStreamReader:将字节流转换为字符流。

④OutputStreamWriter:将字符流转换为字节流。

⑤CharArrayReader:将char数组作为输入流的数据源。

⑥CharArrayWriter:将char数组作为输出流的数据源。

⑦BufferedReader:带缓存的字符输入流,提高读写效率。

⑧BufferedWriter:带缓存的字符输出流,提高读写效率。

3.字符流的常用方法

①read():读取单个字符。

②read(char[] cbuf):将字符读入数组cbuf中。

③write(int c):将单个字符写入输出流。

④write(char[] cbuf):将字符数组cbuf中的所有字符写入输出流。

⑤flush():刷新此输出流并强制任何缓冲的输出字符被写出。

三、IO流的应用

1.读取文件

使用FileInputStream读取文件,可以通过该流读取文件的每一个字节,并将其存储在缓存数组中,最后返回该缓存数组。使用FileReader读取文本文件,则可以通过该流读取文件的每一行文本,并以字符串形式返回每一行文本。

示例代码:

//读取二进制文件

File file = new File("D:/test.txt");

InputStream in = null;

try {

    in = new FileInputStream(file);

    byte[] buf = new byte[1024];

    int len = 0;

    while ((len = in.read(buf)) != -1) {

        System.out.println(new String(buf, 0, len));

    }

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (in != null) {

        try {

            in.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

//读取文本文件

File file = new File("D:/test.txt");

Reader reader = null;

try {

    reader = new FileReader(file);

    char[] cbuf = new char[1024];

    int len = 0;

    while ((len = reader.read(cbuf)) != -1) {

        System.out.println(new String(cbuf, 0, len));

    }

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (reader != null) {

        try {

            reader.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

2.写入文件

使用FileOutputStream写入文件,可以通过该流向文件中写入每一个字节。使用FileWriter写入文本文件,则可以通过该流向文件中写入每一行文本。

示例代码:

//写入二进制文件

File file = new File("D:/test.txt");

OutputStream out = null;

try {

    out = new FileOutputStream(file);

    out.write("Hello IO!".getBytes());

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (out != null) {

        try {

            out.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

//写入文本文件

File file = new File("D:/test.txt");

Writer writer = null;

try {

    writer = new FileWriter(file);

    writer.write("Hello IO!");

    writer.write("

");

    writer.write("Hello World!");

    writer.flush();

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (writer != null) {

        try {

            writer.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

以上就是Java IO流的一些常用的抽象类、子类及其常用的方法,以及IO流的简单应用实例。通过对IO流的学习和应用,我们可以更好地理解和掌握Java语言的输入输出机制,开发出更高效、更稳定的Java应用程序。