Java中IO流函数的使用说明
Java中的IO流函数可以让程序读取和写入不同类型的数据,如文件、网络连接、内存缓存等。在Java中,IO流分为输入流和输出流。输入流用于读取数据,而输出流用于写入数据。本文将对Java中的IO流函数的使用进行详细的说明。
一、Java IO流的分类
1.字节流:字节流按照数据传输方式分为输入流和输出流,按照数据传输来源分为节点流和处理流。
(1)字节输入流
1)节点流:FileInputStream可以从文件读取数据。
FileInputStream fileInputStream = new FileInputStream("temp.txt");
2)处理流:InputStreamReader可以从InputStream读取数据,它接收字节流并根据编码类型将其转换为字符流。
FileInputStream fileInputStream = new FileInputStream("temp.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"UTF-8");
(2)字节输出流
1)节点流:FileOutputStream可以向文件写入数据。
FileOutputStream fileOutputStream = new FileOutputStream("temp.txt");
2)处理流:OutputStreamWriter可以向OutputStream写入数据,它接收字符流并根据编码类型将其转换为字节流。
FileOutputStream fileOutputStream = new FileOutputStream("temp.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"UTF-8");
2.字符流:字符流按照数据传输方式分为输入流和输出流,按照数据传输来源分为节点流和处理流。
(1)字符输入流
1)节点流:FileReader可以从文件读取数据。
FileReader fileReader = new FileReader("temp.txt");
2)处理流:InputStreamReader可以从InputStream读取数据,它接收字节流并根据编码类型将其转换为字符流。
FileInputStream fileInputStream = new FileInputStream("temp.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"UTF-8");
(2)字符输出流
1)节点流:FileWriter可以向文件写入数据。
FileWriter fileWriter = new FileWriter("temp.txt");
2)处理流:OutputStreamWriter可以向OutputStream写入数据,它接收字符流并根据编码类型将其转换为字节流。
FileOutputStream fileOutputStream = new FileOutputStream("temp.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"UTF-8");
二、Java IO流的基本操作
1.数据的读取
用InputStream或Reader的read方法读取,可以读取单个字节或字符,也可以读取一定长度的字节或字符,返回值为int类型,读取到末尾返回-1.
//读取单个字节
InputStream inputStream = new FileInputStream("temp.txt");
int i;
while ((i = inputStream.read()) != -1) {
System.out.print((char) i);
}
//读取指定长度的字节数组
InputStream inputStream = new FileInputStream("temp.txt");
byte[] b = new byte[1024];
int len;
while ((len = inputStream.read(b)) != -1) {
System.out.print(new String(b, 0, len));
}
2.数据的写入
用OutputStream或Writer的write方法可以写入单个字节或字符,也可以写入一定长度的字节或字符。
//写入单个字节
OutputStream outputStream = new FileOutputStream("temp.txt");
outputStream.write('H');
outputStream.write('e');
outputStream.write('l');
outputStream.write('l');
outputStream.write('o');
//写入指定长度的字节数组
OutputStream outputStream = new FileOutputStream("temp.txt");
byte[] b = "Hello World".getBytes();
outputStream.write(b);
3.关闭流
Java中的流是一种资源,需要使用完毕后显式关闭才能释放资源。Java中可以使用try-with-resource的语法自动关闭流,也可以使用finally语法显式关闭流。
//try-with-resource语法
try (FileInputStream fileInputStream = new FileInputStream("temp.txt")) {
//读取数据或者其他操作
} catch (Exception e) {
e.printStackTrace();
}
//finally语法
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("temp.txt");
//读取数据或者其他操作
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、Java IO流的高级操作
1.字符编码
Java中的字符编码有很多种,最常用的是UTF-8和GBK。在使用字符流处理数据时,一定要确定文件的编码格式,否则会出现乱码的情况。可以使用InputStreamReader和OutputStreamWriter的构造方法来指定编码格式。
FileInputStream fileInputStream = new FileInputStream("temp.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
2.IO流缓存
Java提供了缓存流来提高IO流的读写效率,包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter等。
//BufferedInputStream
FileInputStream fileInputStream = new FileInputStream("temp.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] b = new byte[1024];
int len;
while ((len = bufferedInputStream.read(b)) != -1) {
System.out.write(b, 0, len);
}
//BufferedWriter
FileWriter fileWriter = new FileWriter("temp.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("Hello World");
bufferedWriter.newLine(); //换行
bufferedWriter.write("Java IO流");
3.字节流和字符流之间的转换
Java中可以通过InputStreamWriter和OutputStreamWriter将字节流转换成字符流,也可以通过InputStreamReader和OutputStreamWriter将字符流转换成字节流,从而实现不同类型数据的读取和写入。
FileOutputStream fileOutputStream = new FileOutputStream("temp.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
outputStreamWriter.write("Hello World");
FileInputStream fileInputStream = new FileInputStream("temp.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
char[] c = new char[1024];
int len;
while ((len = inputStreamReader.read(c)) != -1) {
System.out.print(new String(c, 0, len));
}
总结:
Java中,IO流是非常重要的一部分,可以通过它来读写不同类型的数据。在使用IO流时,需要注意数据类型的匹配、缓存的使用以及流的关闭。以上内容是对Java中IO流函数的简单介绍,希望能够对读者有所帮助。
