java操作文件——拷贝文件

/******************************************************************
 *   最经闲暇之余,顺便总结了一点小东西,欢迎各位指点,主要操作文件的拷贝*
 * 前几天朋友问我,关于文件操作的问题,我当时觉得请简单的,最后才发现里  *  
 *面的学问大着呢?自己只是略懂皮毛而已,顺便把问题说说吧:主要是关于文 *
 *件的拷贝,即单层目录、多层目录、拷贝整个文件夹的文件等等。今天主要就 *
 *说说单层目录、多层目录、拷贝整个文件夹的文件他们吧,希望对各位有帮助   *
 * 对了,里面还有许多测试的代码没有删除,因为考虑到有些朋友可能需要测试 *
 *还有就是文件操作的效率等问题,暂时还未考虑                                                            *
 ******************************************************************/

package com.java.FileOption;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class azazz {
 public static void main(String[] args) {
  //拷贝单个文件
  coppyFile("e:/小红帽.txt", "d:/java/学习/文档/邢海明/你回家.txt");
  //拷贝整个文件夹
  //coppyAllFile("E:/新建文件夹", "d:/java/学习/文档/资料");
 }
 /**
  * 拷贝文件
  * @param sourcePath
  * @param descPath
  * @return
  */
 public static Boolean coppyFile(String sourcePath, String descPath) {
  Boolean flag = false;
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try {// 创建源文件路径【sourcePath】
   //【从源文件中读取数据的数据流 fis】
   fis = new FileInputStream(sourcePath);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println("系统找不到源文件,请确认以下路径是否正确: " + sourcePath);
   e.printStackTrace();
   return flag;
  }
  File file = new File(descPath);
  if (!file.exists()) {// 如果目标路径不存在
   createFiles(descPath);
  }
  try {// 创建目录文件【descPath】
   //【写入目标文件中的数据流 fos】
   fos = new FileOutputStream(file);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println("目标文件创建失败:" + descPath);
   // e.printStackTrace();
   return flag;
  }
  int c = 0;
  byte buffer[] = new byte[1024];
  try {
   while ((c = fis.read(buffer)) != -1) {
    fos.write(buffer);
   }
   flag = true;
   System.out.println("恭喜你!文件拷贝成");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("文件写入失败:" + e.getLocalizedMessage());
   // e.printStackTrace();
   return flag;
  }
  // 关闭输入输出流
  try {
   fos.close();
   fis.close();
  } catch (IOException e) {
   // TODO Auto-generated catch blocks
   System.out.println("关闭输入输出流: " + e.getLocalizedMessage());
   // e.printStackTrace();
   return flag;
  }
  return flag;
 }
 /**
  * 非根路径中创建文件,即多层文件夹是 前提是: path必须一个正确的路径
  * 拷贝单个文件
  * @param path文件
  */
 public static Boolean createFiles(String path) {
  Boolean flag = false;
  File file = null;
  if (!path.equals("") || path != null) {
   file = new File(path);
   if (!file.exists()) {
    // 创建目录
    File fileDir = new File(file.getParent());
    fileDir.mkdirs();
    System.out.println("上层文件夹: " + fileDir);
    try {
     flag = file.createNewFile();// 在已有文件路径上直接创建文件
     System.out.println("文件名称:" + file);
    } catch (IOException e) {
     System.out.println("创建文件失败:" + e.getLocalizedMessage());
     e.printStackTrace();
    }
   }else{
    System.out.println("【"+path+"】:"+"该文件已经存在");
   }
  }
  return flag;
 }
 
 /**
  * 拷贝整个文件夹下的文件
  * @param sourcePath
  * @param descPath
  * @return
  */
 public static Boolean coppyAllFile(String sourcePath, String descPath) {
  Boolean flag = false;
  //创建源文件夹文件对象
  File fileSource = new File(sourcePath);
     if(fileSource.isDirectory()){//如果源文件家对象是一个目录
      //创建目标
      File file = new File(descPath);
   if (!file.exists()) {// 如果目标路径不存在
    createAllFiles(descPath);
   }
   //得到源文件的所有文件
   File[] files = fileSource.listFiles();
   for(File file2 : files) {
    coppyAllFile(file2.toString(), descPath + "/" + file2.getName());
   }
     }else{
      coppyFile(sourcePath, descPath);
  }
  return flag;
 }

 /**
  * 非根路径中创建文件,即多层文件夹是 前提是: path必须一个正确的路径
  * 拷贝整个文件
  * @param path文件
  */
 public static Boolean createAllFiles(String path) {
  Boolean flag = false;
  File file = null;
  if (!path.equals("") || path != null) {
   file = new File(path);
   if (!file.exists()) {
    // 创建目录
    File fileDir = new File(file.getParent());
    fileDir.mkdirs();
    //System.out.println("上层文件夹: " + fileDir);
   }else{
    System.out.println("【"+path+"】:"+"该文件已经存在");
   }
  }
  return flag;
 }
 
 /**
  * 替换掉文件路径中的正斜杠
  * @param path
  * @return
  */
 public String conversPath(String path) {
  return path.replace("\\", "/");
 }
 public static void copyFile(String src, String dest) {
  // 创建源文件输入流对象
  FileInputStream in = null;
  try {
   in = new FileInputStream(src);
  } catch (FileNotFoundException e) {
   System.out.println("源文件不存在,请确认:" + e.getLocalizedMessage());
   // TODO Auto-generated catch block
   // e.printStackTrace();
   // return;
  }
  File file = new File(dest);// 创建目标文件
  if (!file.exists()) {// 如果该文件不存在,则必须创建该文件
   try {
    file.createNewFile();
    System.out.println("文件创建成功:" + file.getPath());
   } catch (IOException e) {
    System.out.println("创建文件失败:" + e.getLocalizedMessage());
    // TODO Auto-generated catch block
    // e.printStackTrace();
    // return;
   }
  }
  // 创建文件输出流对象
  FileOutputStream out = null;
  try {
   out = new FileOutputStream(file);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   // return;
  }
  int c;
  byte buffer[] = new byte[1024];
  try {
   while ((c = in.read(buffer)) != -1) {
    for (int i = 0; i < c; i++) {
     out.write(buffer[i]);
    }
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   in.close();
   out.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
更多相关文章
  •      大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一次性加载到内存中:事实上,内存也不允许这么干),所以在C#中出现了内存流这个东西.先看下面的内容,F ...
  • 利用递归的方法删除和拷贝文件原理很简单:程序自己调用自己实现文件的删除和拷贝,代码如下:import java.io.*; public class Dptest { //删除指定文件夹下的所有文件及根文件夹 public void deleteFile(String path) { File f ...
  • Java操作excel文件
          前两天学习了两种java操作excel的方法,对于网站需要创建.修改.导出excel文件,可以使用这两种方法,第一种方法是使用JExcel,第二种方法是使用poi中的HSSF,前一种方法比较简单.这里做个总结. 1.JExcel,需要的jar包jxl.jar 只读文件 Workbook ...
  • Java操作PDF文件iText
    上次我们用jacob来操作Microsoft Word,今天我们来操作PDF文档.虽然jacob中也有关于PDF的方法,但是过于复杂.iText是一个开源的PDF工具,小巧而又便捷.官方网站是:http://www.lowagie.com/iText/官方的解释:iText is a library ...
  • Java操作XML文件常用的有四种方式:Dom,JDom,Sax以及Dom4j.Dom解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构.优点:整个文档树在内存中,便于操作:支持删除.修改.重新排列等多种功能:缺点:将整个文档调入内存(包括无用的节点) ...
  • java操作properties文件的工具类简单封装:注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的.比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活 ...
  • 本文给出使用Java字节流实现文件拷贝的例子 package LearnJava; import java.io.*; public class FileTest { public static void main(String args[]) throws Exception{ if(args.l ...
  • /// <summary> /// 注册表主键枚举 /// </summary> public enum RootKey : uint { HKEY_CLASSES_ROOT = 0x80000000, HKEY_CURRENT_USER = 0x80000001, HKEY ...
一周排行
  • IOS学习笔记(六)之IOS开发-UISlider的概念和使用方法      Author:hmjiangqq      Email:jiangqqlmj@163.comUISlider视图:作用:控制系统声音,或者 ...
  • 在 Stack Overflow 上有这样的一个贴子<What's your most controversial programming opinion?>,翻译成中文就是"你认为最有争议的编 ...
  • 1 string strUserAgent = Request.UserAgent.ToString().ToLower(); 2 if (strUserAgent != null) 3 { 4 5 if (Requ ...
  • 今天是来CA后头一次加班到这么晚才回家.主要是干活太慢了,慢到自己都不好意思了.我这儿这些文件不改完,影响team分build给QA测试.让我想起打反恐了--归自己的点守不住,完全有可能导致全盘失败.Edward和J ...
  • 春节回来后至今的工作汇总
    春节刚回来的几天处理了以前留下的问题以及客户反馈的问题. 之后到现在大部分的时间主要是在做 ...
  • 网络流氓软件的现状及对公司的影响 流氓应用不只是把网络带宽全"吃"没了,还影响别人使用网络,使整个网络成为一种永无休止的等待.网络流氓软件的应用种类众多,主要形式有下面几种:1)P2P:典型的有B ...
  • 巴黎新式婴儿饼干,你敢吃吗?     
  • 我所记录的git命令非常实用
    一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问 ...
  • 公司培训笔记1:沟通的技巧
    培训课程:沟通的技巧 为什么要学这门课?(沟通很重要)双50理论:经理人50%以上时间在沟 ...
  • 项目中经常有用到动画效果,比如Loading.风车转动等等.最简单的办法是使用gif,但是gif在半透明背景下有白边,体验不友好,好在现在可以使用css3的anmiation来实现动画效果,极大的提升了用户体验.下面 ...