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 ...
一周排行
  • linux-sar避免系统瓶颈--简单实用的工具
    Linux-sar作用目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系 ...
  •  mysqldump命令没有备份权限的功能,作为一个数据库完整的备份,还需要备份权限,备份脚本如下:#!/bin/bash MysqlUser=xxx MysqlPass=xxx MysqlCharset=utf8 ...
  • 今天看到一条SQL语句,里面用到了Union All,心里不太明白Union All和Union的区别,于是找了一下资料.在W3CSchool,找到了SQL UNION 和 UNION ALL 操作符,总结一下:Un ...
  • chpasswd用法:1 先定义包含新密码的文本文件a,格式如下          用户名1:密码          用户名2:密码            ...     ...      2 #chpasswd & ...
  • 管理日志-原创理论工具--技能方格图
    假如我们用椭圆表示只是点,以及扩展开来的领域 来表示相关知识图A 图B 图B比图A多了一个 ...
  • 正式开始Django学习历程.要用Django第一步就是要配置好环境啊. 我的配置: OS:              Ubuntu 12.10 Server:         Apache 2.2.22 Datab ...
  • 1.所有进程共用一个消息队列组. 2.消息队列组里面包含一个发送消息队列和一个接收消息队列. 3.请求进程主动向发送消息队列发送消息,从接收消息队列接收消息.处理进程从发送消息队列读取请求,向接收队列发送处理结果. ...
  • SQL2005学习三十五,多表查询
    在实际查询应用中,用户所需的数据并不全部都存储在一个表或视图中,而可能在多个表中,这时候就 ...
  • Oracle10g(10.2) 在Redhat AS4u2 x86_64 上安装 说明: # -> root的shell $ -> oracle的shell ----------------------- ...
  • 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找我询问,我又细细 ...