您的位置:首页 > 编程语言 > Java开发

Java实现分类文件拷贝3

2008-10-31 19:14 435 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: