JAVA中没有提供特定的文件拷贝方法,但可以通过文件输入输出流对文件进行逐字节拷贝。
而在编写代码时,要处理以下几个异常:
1.如果拷贝的源文件不存在。
2.源文件和目标文件的类型不同(也就是扩展名不同),将导致源文件和目标文件的内容不一致。
3.在读写文件时,可能会发生异常。
下面是一个自定的文件拷贝类的例子。
import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import javax.swing.JOptionPane;
/**
*程 序:文件拷贝
*文件名:FileCopy
*平 台:windows 2000
*编译器:JDK1.5.0
*描 述:该类是抽象类,通过调用方法copy对两个同类型文件进行拷贝
* 参 数:目标文件名,源文件名。
**/
public abstract class FileCopy {
/*拷贝文件*/
public static boolean copy(String resultFile, final String sourceFile) {
boolean isCopy = false;
//判断目标文件名和源文件名类型是否相同(即扩展名是否相同)
if (!isEqualsType(resultFile, sourceFile)) {
JOptionPane.showMessageDialog(null, "目标文件和源文件的类型不同,不能拷贝!");
return false;
} else {
//类型相同
File readFile = new File(sourceFile);
File writeFile = new File(resultFile);
//判断源文件是否存在
if (readFile.exists() && readFile.isFile()) {
//如果目标文件已经存在,询问是否覆盖
if (writeFile.exists()) {
int state = JOptionPane.showConfirmDialog(null,
"目标文件" + resultFile + "已经存在,是否覆盖?");
if (state != JOptionPane.YES_OPTION) {
return false;
}
}
FileInputStream readStream = null;
FileOutputStream writeStream = null;
try {
readStream = new FileInputStream(readFile);
writeStream = new FileOutputStream(writeFile);
while (readStream.available() > 0) {
int content = readStream.read();
writeStream.write(content);
}
JOptionPane.showMessageDialog(null, "文件拷贝成功!");
isCopy = true;
} catch (IOException ioErr) {
JOptionPane.showMessageDialog(null, "源文件读取错误!请检查文件");
} catch (Exception err) {
JOptionPane.showMessageDialog(null, "文件拷贝错误!请检查目标文件内容是否正确!");
} finally {
try {
readStream.close();
writeStream.close();
} catch (IOException ioErr) {
isCopy = false;
}
}
}
//不存在,则返回false
else {
JOptionPane.showMessageDialog(null, "源文件" + sourceFile + "不存在!");
}
return isCopy;
}
}
/**
*判断目标文件和源文件的类型是否相同
*即判断扩展名是否相同
**/
private static boolean isEqualsType(String resultFile, String sourceFile) {
int resultDot = resultFile.lastIndexOf('.');
int sourceDot = sourceFile.lastIndexOf('.');
String resultType = "";
String sourceType = "";
if (resultDot > 0) {
resultType = resultFile.substring(resultDot + 1, resultFile.length());
}
if (sourceDot > 0) {
sourceType = sourceFile.substring(sourceDot + 1, sourceFile.length());
}
return resultType.equals(sourceType);
}
}