主要是工作代码,无解释。

    /**
* 将文件或文件夹source复制到dest
* <br>目标文件检测:
* <br> a.当文件不存在时:需要创建文件
* <br> 根据是否有后缀名来确定是创建的是文件夹还是文件,有后缀名时创建文件
* <br> 如果创建的是文件夹则会将source复制到dest文件夹中。
* <br> 如果是文件,则直接将source复制为dest
* <br> b.当文件存在时:需要判断目标文件是文件夹还是文件
* <br> 如果是文件夹,在该文件夹下创建以来源文件名命名的文件
* @param source
* @param dest
*/
public static void moveFile(File source,File dest) throws FileNotFoundException,IOException{
FileInputStream fis = null;
FileChannel fc= null;
FileOutputStream fout= null;
WritableByteChannel to= null;
try {
if(!source.exists()){
System.out.println("源文件不存在!");
return ;
}
if(source.isDirectory()){
File[] srcs = source.listFiles();
for(File src:srcs){
moveFile(src,new File(dest.getPath()+File.separator+src.getName()));
}
}else{
if(!dest.exists()){
if(!new File(dest.getParent()).exists()){
new File(dest.getParent()).mkdirs();
}
//根据是否有后缀名来确定是创建的是文件夹还是文件,有后缀名时创建文件。
if(dest.getName().matches(".*\\..*")){
dest.createNewFile();
}else{
dest.mkdir();
dest = new File(dest.getPath()+File.separator+source.getName());
dest.createNewFile();
}
}else{
//当目标文件存在时,需要判断目标文件是文件夹还是文件,如果是文件夹,在该文件夹下创建以来源文件名命名的文件
if(!dest.getName().matches(".*\\..*")){
dest = new File(dest.getPath()+File.separator+source.getName());
dest.createNewFile();
}
}
fis = new FileInputStream(source);
fc=fis.getChannel();
fout=new FileOutputStream(dest);
to=fout.getChannel();
fc.transferTo(0,fc.size(),to);
fis.close();
fc.close();
fout.flush();
fout.close();
to.close();
}
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
} finally {
if(fis!=null){
fis.close();
}
if(fc!=null){
fc.close();
}
if(fout!=null){
fout.flush();
fout.close();
}
if(to!=null){
to.close();
}
}
}

最新文章

  1. C#:获取设备电量相关信息
  2. Kruskal算法(三)之 Java详解
  3. 树形DP习题
  4. URAL 1303. Minimal Coverage(DP)
  5. 【Java学习笔记】&lt;集合框架&gt;TreeSet,Comparable,Comparator
  6. 同步git修改文件到远端服务器脚本
  7. 开源中国iOS客户端学习
  8. mvc请求过程总结
  9. 中点Bresenham画圆
  10. python flask框架 tempates 模版的使用
  11. Java方法参数的传递方式
  12. ThreadLocal使用和原理简析
  13. C_数据结构_走迷宫
  14. ios开发之 NSObject详解
  15. spring 自己定义标签 学习二
  16. jquery中ajax处理跨域的三大方式
  17. git clone的时候filename too long解决办法
  18. [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件
  19. Sublime必用快捷键[私人]
  20. Google浏览器Chrome安装失败,错误代码0xa0430721解决办法

热门文章

  1. javascript中click和onclick的区别
  2. css 动画【转】
  3. Spring Boot中使用使用Spring Security和JWT
  4. 026、一张图搞懂docker(2019-01-21 周一)
  5. nginx接入let&#39;s encrypt
  6. ****** 四十九 ******、软设笔记【UML分析和意义】-建模的意义,UML的特点、结构,用例图
  7. HTML 实例学习(基础)
  8. mini2440串口使用
  9. python 小技巧
  10. jQuery.extend 函数使用