创建一个SafeCopy程序来复制一个文件。这个程序可以在命令行中接收源文件名和目标文件名。只有当目标文件不存在时,程序才将源文件复制到现在要创建的目标文件去,即不覆盖原来已存在的文件。
原理上,这个程序很简单:要创建DataInputStream和DataOutputStream对象,复制源文件的每个字节到目标文件中去。现在,我们可以在创建一个输入流或输出流之前,用File类提供的方法来检查一个文件是否存在。
copyFile()方法使用readByte()和writeByte()来将输入文件中的每个字节复制到输出文件,所以,要用缓冲流来改善程序的效率,如果不使用缓冲流速度就会很慢。
import java.io.*;
public class SafeCopy{
public static void copyFile(DataInputStream in,
DataOutputStream out)throws IOException{
try{
while (true)
out.writeByte(in.readByte());
} catch(EOFException eof) {
return;
}
}
public static void main(String args[]){
if (args.length != 2)
System.out.println("Usage: java SafeCopy sourceFile targetFile");
else{
String inFileName = args[0], outFileName = args[1];
File inFile = new File(inFileName);
File outFile = new File(outFileName);
if (!inFile.exists())
System.out.println(inFileName + " does not exist.");
else if (outFile.exists())
System.out.println(outFileName + " already exists.");
else{
try{
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream(inFileName)));
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(outFileName)));
copyFile(in, out);
in.close();
out.close();
}catch(IOException ioe) {
System.out.println("Unknown error: " + ioe);
}
}