Java中的IO流函数解析及应用
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应用程序。
