Java实现分类文件拷贝3

java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author Caoxh
* @version 1.0
*/

public class SaveFile{
private String filePath="D:\\Work\\upload"; //文件上传路径
private String configeFile="packageConfig.cxh"; //路径配置文件
private String objPath="D:\\Work\\gdlt\\src"; //目标文件路径
private PrintStream ps=null; //输出消息重定向
private ArrayList lines=null; //保存配置文件
String[] heads=null; //保存每条配置的头
String globalLine; //记录一条配置信息
/**
* 读取一个java文件,返回他的package信息取出来
* @param file 文件句柄
* @return 返回包路径
*/
private String readPac(File file){
String pac=null;
try{
BufferedReader fr=new BufferedReader(new FileReader(file));
String line=fr.readLine();
while(line!=null){
//处理当前行
line.trim();
if(line.startsWith("package")){ //找到包了
pac=line.substring(7,line.length()-1).trim();
break;
}
line=fr.readLine();
}
} catch(IOException ie){
pac=null;
ie.printStackTrace();
}
return pac;
}

/**
* 取得一条配置文件的头 例如sbzs:
* @param line 一条配置文件
* @return
*/
private String getHead(String line){
int pos=line.indexOf(":");
if(pos==-1){
ps.println("配置文件有错");
return "";
}
return line.substring(0,pos);
}

/**
* 读取配置文件,到ArrayList和heads
* @return
*/
private boolean readCfg(File cfgFile){
try{
BufferedReader fr=new BufferedReader(new FileReader(cfgFile));
String line=fr.readLine();
while(line!=null){
//处理当前行
line.trim();
lines.add(line);
line=fr.readLine();
}
int size=lines.size();
heads=new String[size];
for(int i=0;i<size;i++){
line=(String)lines.get(i);
heads[i]=getHead(line);
}
fr.close();
} catch(IOException ie){
ie.printStackTrace();
return false;
}
return true;
}

/**
* 写入配置文件
* @return
*/
private boolean saveCfg(File cfgFile){
if(lines==null||lines.size()==0){
return false;
}

try{
cfgFile.delete();
cfgFile.createNewFile();
BufferedWriter bw=new BufferedWriter(new FileWriter(cfgFile));
int size=lines.size();
for(int i=0;i<size;i++){
bw.write((String)lines.get(i));
bw.newLine();
}
bw.flush();
bw.close();
} catch(IOException ie){
ie.printStackTrace();
return false;
}
return true;
}

/**
*
* 通过package信息把该文件应该在的位置取出来
* @param pack 包路径
* @return 返回该文件应该在的路径 返回null表示识别失败,需要读入 比如sbzs
* 并智能的更新配置文件
*/
private String parsePac(String pack,File cfgFile){
String path=null;
String line=null;
try{
for(int i=0;i<heads.length;i++){
line=(String)lines.get(i);
if(line.indexOf(pack)>0){ //找到了
return heads[i];
}
}
//没有找到,进行询问
ps.print("请输入包 "+pack+" 所在的路径:(例如:sbzs)");
DataInputStream dis=new DataInputStream(System.in);
path=dis.readLine().trim().toLowerCase();
dis.close();
if(path==null||path.length()==0){
ps.println("没有输入有效的包所在位置");
} else{ //得到名字,写入
int i;
for(i=0;i<heads.length;i++){
if(path.equals(heads[i])){ //找到了目标,把该包加入
String tmp=(String)lines.get(i)+"|"+pack;
lines.set(i,tmp); //更新
break;
}
}
if(i==heads.length){ //目前还没有这个位置,加入并更新
lines.add(path+":"+pack);
String[] tmp=new String[heads.length+1];
System.arraycopy(heads,0,tmp,0,heads.length);
tmp[heads.length]=path;
heads=tmp;
}
}
} catch(IOException ie){
path=null;
ie.printStackTrace();
}
return path;
}

/**
* 把该文件拷贝到完整的路径中去
* @param file 文件句柄
* @param path 文件目标的绝对路径
* @return
*/
private boolean copy(File file,String fullPath){
ps.println("开始拷贝文件....");
ps.println("源文件:"+file.getName());
ps.println("目标文件在:"+fullPath);
String fileName=file.getName();
int pos=fileName.lastIndexOf(File.separator);
if(pos>0){
fileName=fileName.substring(pos+1,fileName.length());
}
String lastPath=fullPath+File.separator+fileName;
File objFile=new File(lastPath);
if(objFile.exists()&&!objFile.delete()){ //如果存在则删除
ps.println("删除目标文件失败");
return false;
}
//开始拷贝
try{
objFile.createNewFile();
FileInputStream fis=new FileInputStream(file);
FileOu
posted @ 2008-10-31 19:14  Earl_86  阅读(353)  评论(0编辑  收藏  举报