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 ...
一周排行
  • 0.最直接了当的方法:先以sys as sysdba 登陆Oracle>sql shutdown>sql startupdrop user username cascade创建新用户1.select   ...
  • 配置kickstart的方法
    配置kickstart的方式:(1)手动编辑配置文件;(2)安装 system-confi ...
  • 10年的技术工作,软件这个词对我来说一点都不陌生,但是当我问自己如何理解软件的?我却不知道如何回答.软件=业务+架构+流程+组织,其中公式是借用软件产品线工程BAPO的概念,我觉得不错,这个ppt就是我去年思考的一个 ...
  • 众所周知,由于公共IP的短缺,我们在组建局域网时,通常使用保留地址作为内部IP,这些保留地址Internet上是无法被路由的,所以在正常情况下我们无法直接通过Internet访问到在局域网内的主机.为了实现这一目的, ...
  •     条形码的应用越来越普及,只是目前的应用中还是以一维居多,比如目前超市收银台都是刷一维码的.由于一维码本身的编码机制所限,一维码所能表示的信息也是有限的,特别是信息多了以后,很难识别.因此二维码应用而生,根据不 ...
  • 第1页:CPU资源占用100%:看驱动,看启动,看病毒      相信你的一定遇到过电脑动弹不得的时候,或许是只能眼看鼠标滑动而不能进行任何操作的时候,很多人都会经常遇到这样的问题:CPU占用率100%改如何解决,本 ...
  •  本TOP为经典BGP的过度AS图接下来是配置AR[AR][AR][AR]dis cur#sysname AR#cpu-usage cycle 1min#r ...
  •     这几天正在搭建LAMP环境,差不多快完工了,最近几天文档差不多就可以整理出来了.在搭建LAMP环境的时候DNS的支持是必须的,所以今天先把DNS的文档先整理出来了.这样在整理后面的LAMP和postfix邮件 ...
  •     /etc/init.d/httpd restart启动Apache服务出现Starting httpd: (98)Address already in use: make_sock: could not bi ...
  • 原文http://blog.csdn.net/signmem/article/details/19513775 相关 openstack  命令行管理, 分下面部分进行介绍  openstack 命令行管理一 - b ...