`

Java实现分类文件拷贝3

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

相关推荐

    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 标准库 -...

    java全集.pdf JAVA全集

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

    opencv_java-jar&dll.zip

    在Java开发中,OpenCV提供了Java接口,使得开发者能够利用其功能来实现图像处理任务。 标题"opencv_java-jar&dll.zip"指的是一个包含OpenCV Java库和DLL依赖文件的压缩包,适用于Java开发者。这个压缩包包含了...

    JAVA 重点 难点集锦

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

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

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

    Java面试资料之IO相关

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

    java学习笔记整理

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

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

    - JRE(Java Runtime Environment)包含Java虚拟机、Java核心类库和支持文件,是运行Java程序所必需的环境。 - JDK(Java Development Kit)包含JRE,外加开发工具(如编译器javac、调试器jdb等)和其他开发者工具...

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

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

    Java学习笔记-IO篇

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

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

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

    Java:面试题大全带答案

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

    CoreJava学习笔记

    3. 静态类:Java不支持直接定义静态类,但可以通过静态内部类来实现类似的功能。 **Singleton模式:** Singleton模式确保一个类只有一个实例,并提供一个全局访问点。 **final关键字:** 1. final变量:一旦被...

    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