Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类

package cn.edu.hactcm.cfcms.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JOptionPane;

/**
 * CFMS :Computer files management system
 * version :1.0 2013-3-1 上午09:39:15
 */
public final class FileOperationUtils {
 /**
  * 创建单个文件
  *
  * @param path
  */
 public static void createFile(String path) {
  try {
   File file = new File(path);
   if (!file.exists()) {
    file.createNewFile();
    JOptionPane.showMessageDialog(null, "成功创建文件", "提示消息",
      JOptionPane.WARNING_MESSAGE);
   } else {
    file.delete();
    file.createNewFile();
    JOptionPane.showMessageDialog(null, "成功创建文件", "提示消息",
      JOptionPane.WARNING_MESSAGE);
   }
  } catch (Exception e) {
   JOptionPane.showMessageDialog(null, "创建文件失败", "提示消息",
     JOptionPane.WARNING_MESSAGE);
   e.printStackTrace();
  }
 }

 /**
  * 创建文件夹
  *
  * @param path
  */
 public static void createFolder(String path) {
  try {
   File file = new File(path);
   // 如果文件夹不存在那么就创建这个文件,如果文件文件夹存在
   if (!file.exists()) {
    file.mkdir();
    JOptionPane.showMessageDialog(null, "成功创建文件夹", "提示消息",
      JOptionPane.WARNING_MESSAGE);
   } else {
    file.delete();
    file.mkdir();
    JOptionPane.showMessageDialog(null, "成功创建文件夹", "提示消息",
      JOptionPane.WARNING_MESSAGE);
   }
  } catch (Exception e) {
   JOptionPane.showMessageDialog(null, "创建文件夹失败", "提示消息",
     JOptionPane.WARNING_MESSAGE);
   e.printStackTrace();
  }
 }

 /**
  * 将一个文件A拷贝给文件B
  *
  * @param from:要传递的文件A
  * @param theNewPath  :拷贝的目标文件B
  * @return
  */
 public static boolean copyFileToFile(String oldPath, String theNewPath) {
  File fromFile = new File(oldPath);
  File toFile = new File(theNewPath);
  FileInputStream fis = null;
  FileOutputStream fos = null;

  // 进行流操作
  try {
   fis = new FileInputStream(fromFile);
   fos = new FileOutputStream(toFile);
   int bytesRead;
   byte[] buf = new byte[4 * 1024];
   while ((bytesRead = fis.read(buf)) != -1) {
    fos.write(buf, 0, bytesRead);
   }
   fos.flush();
   fos.close();
   fis.close();
  } catch (Exception e) {
   System.out.println(e);
   return false;
  }
  // 如果拷贝成功,则返回真值。
  return true;
 }

 /**
  * 文件拷贝到文件夹内
  *
  * @param from:指定的文件
  * @param theNewPath  :指定的文件夹
  * @return
  */
 public static boolean copyFile2Folder(String oldPath, String theNewPath) {
  try {
   File fromFile = new File(oldPath);

   // 要复制到的新文件,如果不存在的话就创建这个文件
   String newPath = theNewPath + File.separator + fromFile.getName();
   File newToFile = new File(newPath);
   if (!newToFile.exists()) {
    newToFile.createNewFile();
   }

   // 通过流的方式复制文件
   FileInputStream fis = new FileInputStream(fromFile);
   FileOutputStream fos = new FileOutputStream(newToFile);
   int length;
   byte[] buf = new byte[4 * 1024];
   while ((length = fis.read(buf)) != -1) {
    fos.write(buf, 0, length);
   }
   fos.flush();
   fos.close();
   fis.close();
  } catch (Exception e) {
   System.out.println(e);
   return false;
  }
  return true;
 }

 // 如果前者是一个文件夹,后者是一个文件夹
 public static boolean copyFolder2Folder(String oldPath, String theNewPath) {
  try {
   File fromFile = new File(oldPath);
   File[] listFiles = fromFile.listFiles();
   // 文件夹的名字
   String fromFileFolderName = fromFile.getName();

   String newPath = theNewPath + File.separator + fromFileFolderName;
   File newFile = new File(newPath);
   if (!newFile.exists()) {
    newFile.mkdir();
   }

   for (int i = 0; i < listFiles.length; i++) {
    if (listFiles[i].isDirectory()) {
     // 文件夹复制到文件夹
     copyFolder2Folder(listFiles[i].getPath(), newPath);
    } else {
     // 文件复制到文件夹
     copyFile2Folder(listFiles[i].getPath(), newPath);
    }
   }
  } catch (Exception e) {
   System.out.println(e);
   return false;
  }
  return true;
 }

 /**
  * 统一控制文件拷贝的的内,这里相当于有了一个开关,符合条件的才可以打开这个开关
  *
  * @param from:任何文件或文件夹
  * @param theNewPath  :任何文件或文件夹
  */
 public static boolean copyFileInAllType(String oldPath, String theNewPath) {
  File fromFile = new File(oldPath);
  File toFile = new File(theNewPath);
  // 如果这两个地址都代表的是文件
  if (fromFile.isFile() && toFile.isFile()) {
   return copyFileToFile(oldPath, theNewPath);
  }

  // 如果前者是一个文件,后者是一个文件目录
  if (fromFile.isFile() && toFile.isDirectory()) {
   return copyFile2Folder(oldPath, theNewPath);
  }

  // 如果将一个文件夹复制给一个文件,这时候将出现错误。
  if (fromFile.isDirectory() && toFile.isFile()) {
   JOptionPane.showMessageDialog(null, "不能给一个文件夹复制给一个文件", "提示消息",
     JOptionPane.WARNING_MESSAGE);
   return false;
  }

  // 如果是一个文件夹复制到另外一个文件
  if (fromFile.isDirectory() && toFile.isDirectory()) {
   return copyFolder2Folder(oldPath, theNewPath);
  }
  return true;
 }

 /**
  * 打开文件夹,并显示所要显示的文件列表 这个方法可能出现访问异常的出现,但是不管是否有异常,都显示文件列表
  *
  * @param path
  */
 public static List<File> openFolder(String path) {
  File file = new File(path);
  List<File> files = new ArrayList<File>();
  try {
   if (file.exists()) {
    File[] listFiles = file.listFiles();
    for (File f : listFiles) {
     files.add(f);
    }
   }
  } catch (Exception e) {
   JOptionPane.showMessageDialog(null, e.getMessage());
   return null;
  }
  return files;
 }
 
 /**
  * 查找指定路径path下包含keyword关键字的文件列表
  * @param path     : 指定的目录
  * @param keyword  :关键字
  * @param files
  * @return
  */
 public static List<File> openFolder(String path,String keyword,ArrayList<File> files) {
  File file = new File(path);
  try {
   //首先判断这个文件是否存在,如果存在继续操作,如果不存在就返回空值
   if (file.exists()) {
    if (file.isFile()) {
     if (file.getName().contains(keyword)) {
      files.add(file);
     }
    } else {
     //如果文件夹的名称中包含关键字,那么就把这个文件添加到文件列表中
     if (file.getName().contains(keyword)) {
      files.add(file);
     }
     
     //不管文件夹是否包含关键字,都要继续操作这个文件夹内部的文件
     File[] listFiles = file.listFiles();
     //如果这个文件夹不是空的继续操作,如果是空的,返回现有的集合
     if (listFiles.length > 0) {
      for (File file2 : listFiles) {
       openFolder(file2.getPath(),keyword,files);
      }
     }
    }
   } else {//不管这个文件是否为空,都返回现有的文件集合
    return files;
   }
  } catch (Exception e) {
   e.printStackTrace();
   JOptionPane.showMessageDialog(null, "对不起,出错啦!");
   return null;
  }
  return files;
 }

 /**
  * 返回文件的信息
  *
  * @param files
  * @return
  */
 @SuppressWarnings("deprecation")
 public static Object[][] getFileInfo(List<File> files) {
  int fileNum = files.size();
  Object[][] fileInfos = new Object[fileNum][9];
  for (int row = 0; row < fileNum; row++) {
   // 获得文件名称
   fileInfos[row][0] = ((File) files.get(row)).getName();
   // 获取文件路径
   fileInfos[row][1] = ((File) files.get(row)).getPath();
   // 文件最后修改时间
   fileInfos[row][2] = new Date(((File) files.get(row)).lastModified())
     .toLocaleString();
   // 文件类型
   fileInfos[row][3] = FileInfoUtils.getFileSuffix(((File) files
     .get(row)).getPath());
   // 文件大小
   fileInfos[row][4] = FileInfoUtils.FormetFileSize(FileInfoUtils
     .getFileSize(((File) files.get(row)).getPath()));
   // 文件是否可读
   fileInfos[row][5] = ((File) files.get(row)).canRead();
   // 判断文件是否可写
   fileInfos[row][6] = ((File) files.get(row)).canWrite();
   // 判断文件是否可读
   fileInfos[row][7] = ((File) files.get(row)).setReadOnly();
   // 判断文件是否是隐藏文件
   fileInfos[row][8] = ((File) files.get(row)).setReadOnly();
  }
  return fileInfos;
 }

 /**
  * 删除文件
  * @param targetFile
  */
 public static void delFile(String targetFile) {
  try {
   String filePath = targetFile;
   File myDelFile = new File(filePath);
   myDelFile.delete();
  } catch (Exception e) {
   JOptionPane.showMessageDialog(null, "删除文件出错!", "错误提示",
      JOptionPane.ERROR_MESSAGE);
   e.printStackTrace();
  }
 }

 /**
  * 删除文件夹
  */
 public static void delFolder(String folderPath) {
  try {
   delAllFile(folderPath); // 删除完里面所有内容
   String filePath = folderPath;
   filePath = filePath.toString();
   java.io.File myFilePath = new java.io.File(filePath);
   myFilePath.delete(); // 删除空文件夹
  } catch (Exception e) {
   System.out.println("删除文件夹操作出错");
   e.printStackTrace();
  }
 }

 /**
  * 删除所有符合条件的文件
  * @param path
  */
 public static void delAllFile(String path) {
  File file = new File(path);
  if (!file.exists()) {
   return;
  }
  if (!file.isDirectory()) {
   return;
  }
  String[] tempList = file.list();
  File temp = null;
  for (int i = 0; i < tempList.length; i++) {
   if (path.endsWith(File.separator)) {
    temp = new File(path + tempList[i]);
   } else {
    temp = new File(path + File.separator + tempList[i]);
   }
   if (temp.isFile()) {
    temp.delete();
   }
   if (temp.isDirectory()) {
    delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
    delFolder(path + "/" + tempList[i]);// 再删除空文件夹
   }
  }
 }

 /**
  * 移动文件,删除原来的文件
  * @param oldPath
  * @param theNewPath
  */
 public static void moveFile(String oldPath, String theNewPath) {
  copyFileInAllType(oldPath, theNewPath);
  delFile(oldPath);
 }

 /**
  * 移动文件夹,然后删除文件夹
  * @param oldPath
  * @param theNewPath
  */
 public static void moveFolder(String oldPath, String theNewPath) {
  copyFileInAllType(oldPath, theNewPath);
  delFolder(oldPath);
 }
}

时间: 2024-11-17 13:55:25

Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类的相关文章

[工具类]文件或文件夹xx已存在,则重命名为xx(n)(2)

写在前面 最近一直在弄文件传输组件,其中一个功能就是,在接收端接收文件时,如果文件已经存在了,则对其进行文件名+索引的方式进行自动重命名,之前也写个类似的工具类,总感觉代码太冗余,每回头想想,总觉得心里有疙瘩,下班的时候在地铁上,又想了想,感觉是我把问题想复杂了,遂将今天的思路整理一下,写了一个辅助类,记录在此. 上篇文章 [工具类]文件或文件夹xx已存在,则重命名为xx(n) ReNameHelper代码 1 using System; 2 using System.Collections.G

在Java中使用SQLite的教程

我一直想写一个在Java中使用SQLite的例子,但是很长时间都找不到一个真正合适的, 现在我终于找到了,我希望它可以帮助那些像我一样的Java新手走出困惑. 测试环境 Intel x86 Laptop Windows XP SP2 Java2 JDK 1.5 Update 8 Netbeans IDE 5.0 import java.sql.*; import org.sqlite.JDBC; /** * Very Basic SQLite Database Example * @author

Java中关于Null的9个解释(Java Null详解)_java

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

java static-关于java中static的问题

问题描述 关于java中static的问题 一.能总结一下java中static关键字的用法吗?及其一些注意事项. 二.帮我解释几个句子为什么是错误的: 1.关键字static final再修饰int类型变量的时候,必须同时定义变量的初始值为0. 2.关键字static放在类前面做修饰符时,表示该类中的所有方法都为静态方法. 解决方案 在Java语言中,static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Ja

java中form表单提交时Action传入不同的对象

问题描述 java中form表单提交时Action传入不同的对象 如题 在我点保存的时候进入action时传参(参数是实体类),参数有可能是不同的实体类, 解决方案 使用hashmap,hashmap的key是属性,value是属性值.在服务器端通过反射给属性赋值/取值/遍历属性. 解决方案二: 可以通过jquery $(""#id"").attr(""action""xxxxx"")然后再$("

方法-java中怎么像C一样改变参形参的值呢?

问题描述 java中怎么像C一样改变参形参的值呢? 如何实现呢?基本类型又没有引用,只能通过设置get set 这类的方法来改变吗? 小白求指导 解决方案 改是能改,用反射,不过不建议. 类似http://blog.csdn.net/danielinbiti/article/details/44907625 还是改变C的写法习惯,要习惯基本类型形参不能变,反正不能变所有问题也能解决. 解决方案二: 包装成一个对象或者用数组传入 解决方案三: java传递的参数有两种方式,普通类型如int,Str

java中Hibernate自动生成的问题 ?

问题描述 java中Hibernate自动生成的问题 ? 我是刚毕业不久的菜鸟,在公司做项目, 用hibernate 自动生成了与表对应的实体类和 增删改查,都是自动生成的 用的时候只需在业务层调用就行, 然后公司来了个两年经验的同事,说: " 现在都没人用Hibernate自动生成了 ,都是用jdbc 做呢, 还有java的注解", 我现在好困惑啊, Hibernate不是封装了jdbc吗? 怎么现在没人用hibernate了反而用jdbc呢? 还有自动生成不是会提高开发效率吗 ?

java中”==”和”Equal”的区别

对于一些基本数据类型,int,long,bool,还有char!,"=="都是表示值相等的意思,没有equal方法. equal方法是object对象里面的方法,java中String不是基本数据类型,而是一个类,它们都是继承object类,还有Integer和int的区别也是Integer是一个类! 在object类中,equal方法与"=="是等同的,"=="不是表示值相等,而是比较对象的地址是否相等!Integer和String都重写了(没

源码剖析AQS在几个同步工具类中的使用

感谢网友[张超盟]的投稿 1. 前言 AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础.J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownLatch.ReentrantLock.ReentrantReadWriteLock.FutureTask等虽然各自都有不同特征,但是简单看一下源码,每个类内部都包含一个如下的内部类定义: abstract static class Sync extends Abstra