Java高效文件流读写操作详解
在Java中,文件读取和写入是非常常见和基础的操作。但是,对于大文件、多线程以及高并发的场景,如果采用普通的文件读取和写入方式,可能会出现性能瓶颈和资源浪费,这时就需要采用高效的文件读写方式。
本篇文章将详细讲解Java高效文件流读写操作的攻略,包括字节流和字符流两种类型。下面将分别针对字节流和字符流进行讲解。
字节流
一、FileInputStream与FileOutputStream
在Java中,FileInputStream和FileOutputStream是最常用的字节流,它们分别继承了InputStream和OutputStream抽象类。FileInputStream可以读取文件的数据,FileOutputStream可以将数据写入文件中。
示例代码:
// FileInputSteam读取文件
FileInputStream fis = new FileInputStream("file.txt");
int data = 0;
while ((data = fis.read()) != -1) {
// 处理读取到的数据
}
fis.close();
// FileOutputStream写入文件
FileOutputStream fos = new FileOutputStream("file.txt");
byte[] data = new byte[]{1, 2, 3};
fos.write(data);
fos.close();
但是,如果文件较大时,使用FileInputStream和FileOutputStream可能会出现性能瓶颈。这时,就需要采用高效的BufferedInputStream和BufferedOutputStream。
二、BufferedInputStream与BufferedOutputStream
BufferedInputStream和BufferedOutputStream是字节流的缓冲流,它们都是继承自FilterInputStream和FilterOutputStream。
使用BufferedInputStream和BufferedOutputStream读写文件时,可以通过设置缓存区的大小,提高读写效率。
示例代码:
// BufferedInputStream读取文件
FileInputStream fis = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(fis, 1024);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = bis.read(buffer)) != -1) {
// 处理读取到的数据
}
bis.close();
fis.close();
// BufferedOutputStream写入文件
FileOutputStream fos = new FileOutputStream("file.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos, 1024);
byte[] data = new byte[]{1, 2, 3};
bos.write(data);
bos.flush();
bos.close();
fos.close();
三、RandomAccessFile
RandomAccessFile是Java中用于随机访问文件的类,可以在文件任意位置进行读取和写入操作。它既可以作为输入流使用,也可以作为输出流使用。
示例代码:
// 读取文件中指定位置的数据
RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(10);
byte[] buffer = new byte[1024];
int length = raf.read(buffer);
raf.close();
// 向文件指定位置写入数据
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(10);
byte[] data = new byte[]{1, 2, 3};
raf.write(data);
raf.close();
字符流
一、FileReader与FileWriter
在Java中,FileReader和FileWriter是最常用的字符流,它们分别继承自Reader和Writer抽象类。FileReader可以读取文件的字符数据,FileWriter可以将字符数据写入文件中。
示例代码:
// FileReader读取文件
FileReader fr = new FileReader("file.txt");
int data = 0;
while ((data = fr.read()) != -1) {
// 处理读取到的字符数据
}
fr.close();
// FileWriter写入文件
FileWriter fw = new FileWriter("file.txt");
char[] data = new char[]{'a', 'b', 'c'};
fw.write(data);
fw.close();
同样,如果文件较大时,使用FileReader和FileWriter会出现性能瓶颈。因此,需要采用高效的BufferedReader和BufferedWriter。
二、BufferedReader与BufferedWriter
BufferedReader和BufferedWriter是字符流的缓冲流,它们都是继承自Reader和Writer抽象类。
使用BufferedReader和BufferedWriter读写文件时,可以通过设置缓存区的大小,提高读写效率。
示例代码:
// BufferedReader读取文件
FileReader fr = new FileReader("file.txt");
BufferedReader br = new BufferedReader(fr, 1024);
String line = null;
while ((line = br.readLine()) != null) {
// 处理读取到的字符数据
}
br.close();
fr.close();
// BufferedWriter写入文件
FileWriter fw = new FileWriter("file.txt");
BufferedWriter bw = new BufferedWriter(fw, 1024);
char[] data = new char[]{'a', 'b', 'c'};
bw.write(data);
bw.newLine(); // 换行
bw.flush();
bw.close();
fw.close();
三、InputStreamReader与OutputStreamWriter
InputStreamReader和OutputStreamWriter是字节流和字符流之间的桥梁,将字节流转换为字符流或将字符流转换为字节流。
示例代码:
// InputStreamReader将字节流转换为字符流
FileInputStream fis = new FileInputStream("file.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr, 1024);
String line = null;
while ((line = br.readLine()) != null) {
// 处理读取到的字符数据
}
br.close();
isr.close();
fis.close();
// OutputStreamWriter将字符流转换为字节流
FileOutputStream fos = new FileOutputStream("file.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw, 1024);
char[] data = new char[]{'a', 'b', 'c'};
bw.write(data);
bw.newLine();
bw.flush();
bw.close();
osw.close();
fos.close();
以上就是Java高效文件流读写操作的详细攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java高效文件流读写操作详解 - Python技术站