//以前上课时做的作业
/********************************************
作业号: 5
功 能: 文件操作
用 法: java MyCtrlFile cmdFlag SourceFile TargetFile
其中: cmdFlag
1: 文件拷贝
2: 文件剪切
3: 文件夹拷贝
例: 拷贝文件夹 C:/Log到D:/Log
java MyCtrlFile 3 C:/Log C:/Log)
作 者:
日 期: 2005-04-26
********************************************/
import java.io.*;
public class MyCtrlFile{
//☆、文件拷贝
public static int MyCopy(String SFile, String TFile){
long date = System.currentTimeMillis();
final int DATASIZE = 1024;
int len=0, byte_count=0;
byte data[] = new byte [DATASIZE];
FileInputStream fis;
FileOutputStream fos;
try{
fis = new FileInputStream(SFile);
fos = new FileOutputStream(TFile);
}catch(FileNotFoundException e){
System.out.println("文件打开失败(可能是指定的文件不存在):"
+ e.getMessage());
return 1;
}
try{
while (true){
len = fis.read(data, 0, DATASIZE);
//向源文件读1024byte(最多1024)数据
if (len==-1) break;
//读入完毕
fos.write(data, 0, len);
//向目标文件写数据
byte_count += len;
}
fos.flush();
//??何时应该flush
}catch(Exception e){
System.out.println("数据读或写失败:"
+ e + ":"
+ e.getMessage());
return 2;
}finally{
try{
fos.close();
fis.close();
}catch(Exception e){
System.out.println("文件关闭失败:"
+ e.getMessage());
}
}
date = System.currentTimeMillis() - date;
System.out.println(SFile + "
-> "
+ TFile + "
<Size : "
+ byte_count + "
bytes, Total time : "
+ date/1000 + "."
+ date%1000 + "
sec.>"
;
return 0;
}
//☆、文件拷贝2(检查目标文件夹是否存在,若不存在,创建)
public static int MyCopy2(String sfile, String tfile) throws Exception{
File t_dir = new File(tfile).getCanonicalFile();
File t_path = new File(t_dir.getParent());
if (! t_path.exists()) t_path.mkdirs();
return MyCopy(sfile, tfile);
}
//☆、文件拷贝2(检查目标文件夹是否存在,若不存在,创建)
public static int MyCopy2(File sfile, File tfile) throws Exception{
String s_file = sfile.getCanonicalFile().getAbsolutePath();
String t_file = tfile.getCanonicalFile().getAbsolutePath();
return MyCopy2(s_file, t_file);
}
//☆、移动文件
public static int MyMove(String SourceFile, String TargetFile) throws Exception{
File myFile;
int i;
myFile = new File(SourceFile);
if (! myFile.exists()){System.out.println("指定的文件不存在: "
+ myFile);
return 1;}
if ((i=MyCopy2(SourceFile, TargetFile))==0) myFile.delete();
//拷贝完毕,删除源文件
return i;
}
//☆、目录拷贝(包含所有的文件和子目录)
// 支持文件拷贝: s为源文件夹(或文件), t为目标文件夹(或文件)
public static int MyCopyDir(String s, String t) throws Exception{
File s_file = new File(s).getCanonicalFile();
File t_file = new File(t).getCanonicalFile();
int ireturn;
if (s_file.isFile()){ //文件拷贝
if ((ireturn=MyCopy2(s, t))!=0) return ireturn;
} //目录拷贝
else
{
String s_path = s_file.getAbsolutePath();
String t_path = t_file.getAbsolutePath();
String[] lists = s_file.list();
for (int i=0;i<lists.length;i++){
File tmp_sf = new File(s_path, lists
);
File tmp_tf = new File(t_path, lists);
//System.out.println("
"
+ tmp_sf + "
--> "
+ tmp_tf);
if (tmp_sf.isFile()){ //拷贝文件
if ((ireturn=MyCopy2(tmp_sf, tmp_tf))!=0) return ireturn;
}else
{ //拷贝文件夹
String stmp1 = tmp_sf.getAbsolutePath();
String stmp2 = tmp_tf.getAbsolutePath();
if ((ireturn=MyCopyDir(stmp1, stmp2))!=0) return ireturn;
}
}
}
return 0;
}
//☆、主程序
public static void main(String[] args){
int i=0, cmdflag=0;
if (args.length!=3){
System.out.println("*************无效的命令行参数***********************"
System.out.println("* java MyCtrlFile cmdFlag Source Target *"
System.out.println("****************************************************"
return;
}
try{
cmdflag = Integer.parseInt(args[0]);
}catch(Exception e){
System.out.println("*************无效的命令行参数***********************"
System.out.println("* 第一个参数应为数字型[1-3] *"
System.out.println("* 1: 文件拷贝 *"
System.out.println("* 2: 文件剪切 *"
System.out.println("* 3: 文件夹拷贝 *"
System.out.println("****************************************************"
return;
}
try{
switch (cmdflag){
case 1 : i = MyCopy2(args[1], args[2]);
break;
case 2 : i = MyMove(args[1], args[2]);
break;
case 3 : i = MyCopyDir(args[1], args[2]);
break;
default : System.out.println("错误的命令行参数"
}
}catch(Exception e){
System.out.println("操作失败:"
+ e + "
- "
+ e.getMessage());
return;
}
if (i!=0) System.out.println("操作失败"
}
}