`

Java实现分类文件拷贝4

    博客分类:
  • Java
阅读更多
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;
}
}
}
分享到:
评论

相关推荐

    java笔记 java笔记

    - **跨平台性**:Java的文件操作不受操作系统限制。 - **序列化接口**:用于将对象转换为字节流以便持久化。 - **I/O流基础**:如InputStream、OutputStream等。 - **流的分类**:字节流和字符流。 - **输入输出**:...

    java IO流详解

    下面通过一个具体的例子来说明如何使用Java IO流进行文件拷贝。 ```java public class FileCopy { public void copy(File source, File dir) { InputStream is = null; OutputStream os = null; try { // 获取...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    实现一个拷贝文件的类使用字节流还是字符串.mp4 │ Java面试题13.线程的实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ ...

    文章分类:Java编程,java面试题2

    - **`.java` 文件:** 包含 Java 源代码的文件。 - **编译:** 使用 `javac` 编译器将 `.java` 文件编译成 `.class` 文件。 - **`.class` 文件:** 包含编译后的字节码,可以被 JVM 执行。 #### 十、Java 标准库 -...

    opencv_java-jar&dll.zip

    4. **使用OpenCV Java**:在Java项目中集成OpenCV,需要在`build.gradle`或`pom.xml`文件中引入`opencv-460.jar`作为依赖,并确保系统环境正确配置了DLL文件路径。此外,还需要了解OpenCV的基本概念,如图像矩阵表示...

    java全集.pdf JAVA全集

    - **Java继承特点**:Java不支持多重继承,但可以通过实现多个接口来模拟多重继承的效果。 - **父类(SuperClass)和子类(SubClass)的关系**:子类继承父类的属性和方法,并可以扩展或重写它们。 **7.3 多态...

    JAVA 重点 难点集锦

    1. 接口:接口是Java实现多继承的方式,了解接口的定义、实现与接口间的继承。 2. 抽象类:理解抽象类的特性,何时使用抽象类,以及抽象方法的定义与实现。 3. 构造器:掌握构造器的作用,深浅拷贝的概念,以及...

    Java 基础核心总结 +经典算法大全.rar

    示例:文件拷贝案例 BIO 和 NIO 拷贝文件的区别操作系统的零拷贝 选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection...

    黑马程序员入学Java精华总结

    4. **异常的分类** - 检查性异常:需要被捕获或声明。 - 运行时异常:在运行时抛出的异常,通常由于编程错误引起。 5. **声明异常(throws)** - 在方法签名中声明可能抛出的异常。 6. **throw** - 主动抛出...

    Java面试资料之IO相关

    Java IO 是 Java 语言中的一种基本输入/输出机制,用于实现数据的读取和写入。本文将从流的分类、流的转换、对象序列化、字节流和字符流的区别、对象克隆等方面对 Java IO 进行总结。 1. 流的分类 Java 中有两种...

    java学习笔记整理

    - `java`: Java解释器,用于执行编译后的字节码文件。 ##### 1.4 集成开发环境 集成开发环境(IDE)是集成了代码编辑、编译、调试等功能于一体的开发工具,常用的Java IDE有Eclipse、IntelliJ IDEA等。 - **...

    bbs论坛(java,javaScript,html,sql server,java servlet)

    这个论坛的实现还涉及到MD5加密技术,确保用户数据的安全性。 【描述】提到的"已完成的论坛"意味着该项目已经是一个完整的、功能完善的系统。它展示了如何将不同技术有效地融合在一起,为用户提供了一个交互式的...

    Java学习笔记-IO篇

    通过这些示例,我们可以看到如何利用Java中的字符流来进行高效的文件读写操作。使用BufferedReader和BufferedWriter等高级流类能够显著提高数据处理的速度和效率,尤其是在处理大量数据时尤为明显。此外,掌握这些...

    Java:面试题大全带答案

    - **Serializable接口**:Java通过实现此接口进行序列化和反序列化,可用于实现深拷贝。 面试中,对于以上知识点的深入理解和实际应用能力是评估候选人技能的关键。例如,面试官可能会问到如何优化集合性能,如何...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    实现一个拷贝文件的工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程? Java面试题14.线程并发库和线程池的作用 Java面试题15.设计模式和常用的设计模式 Java面试题16....

    CoreJava学习笔记

    Java中不同数字类型之间的转换可以通过自动类型提升或显式的强制类型转换来实现。 **强制类型转换:** 当需要将一个较大的类型转换为较小的类型时,需要使用强制类型转换。 **转换的二种类型:** 1. **自动类型...

    java精华总结

    当Java程序被编译时,会生成一种名为字节码(.class文件)的中间形式。这种字节码可以被任何平台上的JVM解释执行。JVM负责将字节码转换成本地机器码,从而实现跨平台运行。 ##### 4. JRE和JDK的区别 - **JRE (Java...

    java从0基础学习笔记

    - 文件操作:学习File类,进行文件的创建、读写和删除。 - 缓冲流:理解BufferedReader和BufferedWriter提高读写效率的作用。 - 转换流:学会使用InputStreamReader和OutputStreamWriter在字节流和字符流之间转换...

    corejava输入输出流学习总结.pdf

    下面是一个使用字节流实现文件拷贝的示例代码: ```java public class TestCopy { public static void main(String[] args) { FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream ...

Global site tag (gtag.js) - Google Analytics