Java文件复制代码如下:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class FileCope {
/***
* 方式一:使用文件流复制
*/
public static void copyFile(String source, String target) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(source);
out = new FileOutputStream(target);
byte[] buffer = new byte[2048];
int readBuffer;
while ((readBuffer = in.read(buffer)) != -1) { // 从输入流中读取一定数量的字节,并将其存储在缓冲区数组buffer中。
out.write(buffer, 0, readBuffer); // buffer数组中从偏移量为0开始的readBuffer个字节写入到out输出流。
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/***
* 方式二:使用Try-with-resources (TWR)进行复制
*/
public static void copyFileTWR(String source, String target)throws IOException{
try (InputStream in = new FileInputStream(source)) {
try (OutputStream out = new FileOutputStream(target)) {
byte[] buffer = new byte[2048];
int bytesToRead;
while ((bytesToRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
}
}
}
/***
* 方式三:使用FileChannel复制
*/
public static void copyFileNIO(String source, String target) throws IOException {
try (FileInputStream in = new FileInputStream(source)) {
try (FileOutputStream out = new FileOutputStream(target)) {
FileChannel inChannel = in.getChannel();
FileChannel outChannel = out.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(2048); //分配一个大小为2048的字节缓冲区。
while (inChannel.read(buffer) != -1) {
buffer.flip(); //反转缓冲区。通常情况下,在准备从缓冲区中读取数据时调用flip方法。
outChannel.write(buffer);
buffer.clear();
}
}
}
}
public static void main(String args[]){
copyFile("E://1.txt","E://2.text");
try {
copyFileTWR("E://2.txt","E://3.txt");
copyFileNIO("E://3.txt","E://4.text");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}