Java是一种广泛使用的编程语言,尤其在企业级应用中应用广泛。在Java应用程序中,文件读写操作是一个常见的操作。本文将介绍在Java中如何高效地读写文件。
一、使用Java NIO读写文件
Java NIO(New IO)提供了一种不同于传统I/O的方式来处理I/O操作。NIO的I/O API可提供更高效,更可伸缩的I/O操作,以及更好的利用操作系统的I/O机制。使用Java NIO读写文件,具有以下优点:
1.更快的速度:相当于传统Java I/O的两倍速度。
2.更少的内存占用:因为NIO使用的是直接内存缓存,而传统Java I/O使用的是堆内存缓存。
3.非阻塞式I/O:NIO可提供非阻塞I/O,从而允许应用程序执行其他任务,而不必等待I/O完成。
二、演示如何使用NIO读写文件
下面是一个简单的Java NIO读写文件示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class NIOReadAndWriteFile {
public static void main(String[] args) {
String srcFilename = "/tmp/myfile.txt";
String destFilename = "/tmp/copyfile.txt";
try {
FileInputStream inputStream = new FileInputStream(srcFilename);
FileChannel inputChannel = inputStream.getChannel();
FileOutputStream outputStream = new FileOutputStream(destFilename);
FileChannel outputChannel = outputStream.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (inputChannel.read(buffer) != -1) {
buffer.flip();
outputChannel.write(buffer);
buffer.clear();
}
inputChannel.close();
inputStream.close();
outputChannel.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码首先打开源文件("srcFilename")和目标文件("destFilename")的输入和输出通道,然后创建一个固定大小的缓冲区(ByteBuffer),并在源文件上调用通道的"read()"方法,一次读取一些字节到缓冲区中。缓冲区写满后,通过调用缓冲区的"flip()"方法,切换到读取模式。然后将缓冲区中的字节写入目标文件的输出通道中,通过调用"write()"方法。最后,清除缓冲区,关闭所有通道和输入/输出流,处理异常。
三、使用Java I/O读写文件
Java I/O(以前称为Java标准I/O或Java旧I/O)是Java平台的传统I/O API。Java I/O为创建复杂I/O操作提供了底层支持,包括文件I/O、网络I/O和套接字I/O等。Java I/O读写文件,是传统的方式,具有以下特点:
1.简单易用,易于掌握。
2.流模型使得程序易于编写和维护。
3.直观,易于理解。
四、演示如何使用Java I/O读写文件
下面是一个使用Java I/O读写文件的示例:
import java.io.*;
public class OldIOReadAndWriteFile {
public static void main(String[] args){
String srcFilename = "/tmp/myfile.txt";
String destFilename = "/tmp/copyfile.txt";
try {
FileInputStream inputStream = new FileInputStream(srcFilename);
FileOutputStream outputStream = new FileOutputStream(destFilename);
int bufferSize;
byte[] buffer = new byte[1024];
while((bufferSize=inputStream.read(buffer))!=-1) {
outputStream.write(buffer, 0, bufferSize);
}
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上代码首先打开源文件("srcFilename")和目标文件("destFilename")的输入和输出流,然后创建一个1024个字节的缓冲区(byte[]),并在源文件上调用输入流的"read()"方法,一次读取一些字节到缓冲区中。缓冲区写满后,通过调用输出流的"write()"方法,写入目标文件中。最后关闭所有流,处理异常。
五、小结
Java文件读写是Java应用程序中常见的操作之一。Java NIO和Java I/O是Java平台中两种不同的文件读写操作方式。Java NIO的文件读写速度更快,内存占用更少,提供非阻塞式I/O,适用于对I/O性能要求较高的场合。而Java I/O是一种较为简单易用的方式,适用于一些简单场合。以上示例演示了如何使用Java NIO和Java I/O进行文件读写操作,供读者参考。