输入/输出(Input/Output)是计算机系统中非常基础的一部分,用于从计算机的外部读取数据或将数据写出到计算机的外部。在Java中,I/O操作被封装在Java IO流中。Java IO流提供了非常灵活的方法来操作各种类型的数据,包括文件、网络连接、内存和其他设备等。
一、Java IO流类型
在Java中,IO流可以分为两种类型:字节流和字符流。字节流主要用于读写二进制文件,如图片和视频等;字符流主要用于读写纯文本文件,如TXT文件等。
1、字节流
字节流是IO操作的基础,在Java中,字节流主要有两个抽象类:InputStream和OutputStream。InputStream是用于读取数据的抽象类,而OutputStream则是用于写出数据的抽象类。
//读取文件并输出文件内容
public void readFile(String fileName) throws IOException{
FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[1024];
int len = 0;
while((len = fis.read(buffer)) != -1){
System.out.println(new String(buffer,0,len));
}
fis.close();
}
//将数据写入到指定文件
public void writeFile(String fileName,String content) throws IOException{
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(content.getBytes());
fos.close();
}
2、字符流
字符流是针对纯文本文件进行操作的IO流。在Java中,字符流主要有两个抽象类:Reader和Writer。Reader是用于读取数据的抽象类,而Writer则是用于写出数据的抽象类。
//读取文件并输出文件内容
public void readFile(String fileName) throws IOException{
FileReader fr = new FileReader(fileName);
char[] buffer = new char[1024];
int len = 0;
while((len = fr.read(buffer)) != -1){
System.out.println(new String(buffer,0,len));
}
fr.close();
}
//将数据写入到指定文件
public void writeFile(String fileName,String content) throws IOException{
FileWriter fw = new FileWriter(fileName);
fw.write(content);
fw.close();
}
二、Java IO流的读写方式
Java IO流提供了多种读写方式,我们可以根据需要来选择适合的方式进行读写。下面将介绍Java IO流的常用读写方式。
1、字节流的读写方式
字节流提供了多种读写方式,其中常用的有FileInputStream和FileOutputStream。这两个类可以分别向文件中读写字节流。
//使用FileInputStream读取文件内容并输出
public void readFile(String fileName) throws IOException{
FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
System.out.println(new String(buffer));
fis.close();
}
//使用FileOutputStream写出文件内容到指定文件中
public void writeFile(String fileName,String content) throws IOException{
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(content.getBytes());
fos.close();
}
2、字符流的读写方式
字符流提供了多种读写方式,常用的有FileReader和FileWriter。这两个类可以分别向文件中读写字符流。
//使用FileReader读取文件内容并输出
public void readFile(String fileName) throws IOException{
FileReader fr = new FileReader(fileName);
char[] buffer = new char[fr.read()];
fr.read(buffer);
System.out.println(new String(buffer));
fr.close();
}
//使用FileWriter写出文件内容到指定文件中
public void writeFile(String fileName,String content) throws IOException{
FileWriter fw = new FileWriter(fileName);
fw.write(content);
fw.close();
}
三、Java IO流的性能优化
在Java中,IO操作是非常耗时的一个过程。为了提高IO操作的效率,我们可以使用缓冲区或者NIO来进行优化。
1、缓冲区的使用
使用缓冲区可以大大提高读写效率,在Java中,InputStream和OutputStream都提供了BufferedReader和BufferedWriter用于缓冲读写。
//使用BufferedReader读取文件内容并输出
public void readFile(String fileName) throws IOException{
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
}
//使用BufferedWriter写出文件内容到指定文件中
public void writeFile(String fileName,String content) throws IOException{
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
bw.write(content);
bw.close();
}
2、NIO的使用
NIO(Non-blocking IO)是Java 1.4引入的新特性,主要用于对IO操作进行优化。在NIO中,使用通道(Channel)来读写数据。
//使用NIO读取文件内容并输出
public void readFile(String fileName) throws IOException{
RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
FileChannel channel = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(channel.read(buffer) > 0){
buffer.flip();
System.out.println(new String(buffer.array()));
buffer.clear();
}
channel.close();
}
//使用NIO写出文件内容到指定文件中
public void writeFile(String fileName,String content) throws IOException{
RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
FileChannel channel = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put(content.getBytes());
buffer.flip();
channel.write(buffer);
channel.close();
}
四、Java IO流的异常处理
在进行IO操作的时候,可能会出现各种异常,例如文件不存在、没有读写权限等。为了确保程序的稳定性,在进行IO操作的时候一定要进行异常处理。
//读取文件内容并输出
public void readFile(String fileName) throws IOException{
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(fileName));
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在!");
}catch(IOException e){
System.out.println("读取文件出错!");
}finally{
if(br != null){
br.close();
}
}
}
//将数据写入到指定文件
public void writeFile(String fileName,String content) throws IOException{
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter(fileName));
bw.write(content);
bw.close();
}catch(FileNotFoundException e){
System.out.println("文件不存在!");
}catch(IOException e){
System.out.println("写出文件出错!");
}finally{
if(bw != null){
bw.close();
}
}
}
总结
Java IO流提供了多种读写方式,并且还有缓冲区和NIO等优化方式来提高IO操作的效率。在进行IO操作的时候一定要进行异常处理,确保程序的稳定性。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/307299.html
微信扫一扫
支付宝扫一扫