Java实现分类文件拷贝4

tputStream fos=new FileOutputStream(objFile);
byte[] buf=new byte[1024];
int i=0;
while((i=fis.read(buf))!=-1){
fos.write(buf,0,i);
}
fis.close();
fos.close();
} catch(IOException ie){
ie.printStackTrace();
return false;
}
return true;
}

/**
* 生成配置文件
* @param pac 包路径
* @param path 文件路径
* @return 返回保存是否正确
*/
public boolean createCfg(){
File dir=new File(objPath);
String[] dirs=dir.list();
String curDir;
char sep=File.separatorChar;
String line;
for(int i=0;i<dirs.length;i++){
if(!new File(objPath+sep+dirs[i]).isDirectory()){
continue;
}
globalLine=null;
curDir=objPath+sep+dirs[i]+sep+"src";
getPath(curDir,null);
line=dirs[i]+":"+globalLine;
lines.add(line);
}
File cfgFile=new File(filePath+sep+configeFile);
saveCfg(cfgFile);
return true;
}

/**
* 递归收集
* @param root
* @param pack
*/
private void getPath(String root,String pack){
if(hasNoSub(root)){ //如果没有了子目录
if(globalLine==null){
globalLine=pack;
} else{
globalLine+="|"+pack;
}
return;
}
File dir=new File(root);
char sep=File.separatorChar;
String[] subs=dir.list();
for(int i=0;i<subs.length;i++){
String curPath=root+sep+subs[i];
File tmp=new File(curPath);
if(tmp.isDirectory()){
if(pack==null){ //如果是目录,则递归
getPath(curPath,subs[i]);
} else{
getPath(curPath,pack+"."+subs[i]);
}
}
}
}

/**
* 判断一个目录是否有子目录,没有返回true
* @param dir
* @return
*/
private boolean hasNoSub(String directory){
File dir=new File(directory);
if(!dir.isDirectory()){
return true;
}
String[] subs=dir.list();
for(int i=0;i<subs.length;i++){
File tmp=new File(dir+File.separator+subs[i]);
if(tmp.isDirectory()){
return false;
}
}
return true;
}

/**
*
* @param fileName
* @return
*/
private String getExt(String fileName){
int pos=fileName.lastIndexOf(".");
if(pos>0){
return fileName.substring(pos+1,fileName.length());
}
return null;
}

/**
* 循环处理一个文件夹
*/
public void excute(){
char sep=File.separatorChar;
File list=new File(filePath+sep+"list.txt");
File dir=new File(filePath);
if(!dir.exists()||!dir.isDirectory()){ //指定的不是目录
ps.println("指定上传文件的目录不正确");
return;
}
File cfgFile=new File(filePath+sep+configeFile);
try{
PrintStream psList=new PrintStream(new FileOutputStream(list));
if(!cfgFile.exists()&&!cfgFile.createNewFile()){ //配置文件不存在
ps.println("指定的配置文件不存在");
return;
}
if(!readCfg(cfgFile)){ //读入配置文件失败
ps.println("读入配置文件失败");
return;
}
File[] files=dir.listFiles();
if(files.length<2){ //没有要上传的文件
ps.println("指定的目录中没有文件");
return;
}
//逐个文件处理
for(int i=0;i<files.length;i++){
File curFile=files[i];
if(!curFile.isFile()||!getExt(curFile.getName()).equals("java")){
continue;
}
psList.println(curFile.getName());
//当前文件是java文件
String pac=readPac(curFile); //取该文件的包路径
ps.println("读包完成....");
if(pac==null){
// ps.println("文件读出包路径出错");
return;
}
String path=parsePac(pac,cfgFile); //通过package取路径
ps.println("解析完成....");
if(path==null){
ps.println("取文件的保存路径出错");
continue; //跳过这个文件
}
//组装成一个完整的路径
String fullPath=objPath+sep+path+sep+"src"+sep+pac.replace('.',sep);
ps.println("建立拷贝路径:"+fullPath);
if(!copy(curFile,fullPath)){
ps.println("拷贝文件失败"+curFile.getName());
continue;
}
curFile.delete();
ps.println("成功保存一个文件");
}
ps.println("成功保存所有文件");
if(!saveCfg(cfgFile)){
ps.println("保存配置文件失败");
return;
}
} catch(IOException ie){
ie.printStackTrace();
}
}

/**
* 构造函数
*/
public SaveFile(){
try{
File log=new File(filePath+File.separator+"cf.log");
if(log.exists()){
log.delete();
}
log.createNewFile();
FileOutputStream fos=new FileOutputStream(log);
ps=new PrintStream(fos);
} catch(IOException ie){
ie.printStackTrace();
System.out.print("创建日志失败!");
ps=System.out;
}
lines=new ArrayList();
}

public static void main(String[] args){
SaveFile sf=new SaveFile();
if(args.length==1){
if(args[0].equals("mc")){ //生成配置文件
sf.createCfg();
}
if(args[0].equals("cf")){ //完成分类拷贝工作
sf.excute();
}
} else{
sf.ps.println("请指定参数:\n mc 生成配置文件\n cf 拷贝文件");
return;
}
}
}
posted @ 2008-10-31 19:15  Earl_86  阅读(221)  评论(0编辑  收藏  举报