`
齐晓威_518
  • 浏览: 617988 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java 的 文件、文件夹 的建立、删除、复制以及移动等功能 操作

 
阅读更多

package util;   
  
import java.io.*;   
  
/**  
 * 提供对文件、文件夹 的建立、删除、复制以及移动等功能  
 * 文件操作工具类  
 * @author 金涛  
 * @version 1.0.0  
 * @date2010-3-4  
 */  
public class FileUtil {   
       
     /**  
      * 新建目录并返回该新建的目录  
      * @param folderPath String 文件夹路径  
      * @return File 新建的目录  
      */  
      public File newFolder (String folderPath) throws Exception {   
          try {   
              File folder = new File(folderPath);   
              if (!folder.exists()) {   
                  folder.mkdir();   
              }   
              return folder;   
           }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("新建目录操作出错");   
           }   
      }   
         
      /**  
       * 新建目录 如果目录路径中有不存在的目录则也进行建立 并返回该新建的目录  
       * @param folderPath String 目录路径  
       * @return File 新建的目录  
       */  
      public File newFolderAndPath (String folderPath) throws Exception {   
          try {   
              File folder = new File(folderPath);   
              if (!folder.exists()) {   
                  folder.mkdirs();   
              }   
              return folder;   
           }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("新建目录操作出错");   
           }   
      }   
         
     /**  
      * 新建文件,从数据如输入流获得数据  
      * @param filePath String 要新建文件路径及名称  
      * @param fis  
      * @return file File 返回建立的文件  
      */  
     public File newFile(String filePath, FileInputStream fis) throws Exception {   
        int len = 0;   
        try {   
             File file = new File(filePath);   
             if (!file.exists()) {   
                 file.createNewFile();   
             }   
             FileOutputStream fs = new FileOutputStream(file);   
             byte[] buffer = new byte[1024];   
             while ((len = fis.read(buffer)) != -1) {   
                 fs.write(buffer, 0, len);   
             }   
             fs.flush();   
             fs.close();   
             fis.close();   
             return file;   
         }catch (Exception e) {   
             e.printStackTrace();   
             throw new Exception ("新建一个文件出错");   
         }   
     }   
        
     /**  
      * 新建一个字符文件,并向其中添加内容  
      * @param filePath 新建的带文件名的文件路径  
      * @param conttent 文件内容  
      * @return file File 返回建立的文件  
      * @throws Exception  
      */  
     public File newFile(String filePath,String conttent) throws Exception {   
         try{   
             File file = new File(filePath);   
             if (!file.exists()) {   
                 file.createNewFile();   
             }   
             FileWriter resultFile = new FileWriter(filePath);   
             PrintWriter myFile = new PrintWriter(resultFile);   
             String strContent = conttent;   
             myFile.println(strContent);   
             myFile.close();   
             resultFile.close();   
             return file;   
         }catch (Exception e) {   
             e.printStackTrace();   
             throw new Exception ("新建一个字符文件出错");   
         }   
     }   
        
     /**  
      * 从文件中获得字节数组  
      * @param f File文件  
      * @return  
      */  
     private byte[] getBytesFromFile(File f) throws Exception {   
        int len = 0;   
        if (f == null && !f.exists()) {   
            return null;   
        }   
        try {   
            FileInputStream stream = new FileInputStream(f);   
            ByteArrayOutputStream out = new ByteArrayOutputStream(1000);   
            byte[] b = new byte[1024];   
            while ((len = stream.read(b)) != -1)   
                out.write(b, 0, len);   
            stream.close();   
            out.close();   
            return out.toByteArray();   
        }catch (Exception e) {   
            e.printStackTrace();   
            throw new Exception ("从文件中获得字节数组出错");   
        }   
    }   
        
        
    /**  
     * 不抛出异常的文件删除  
     * @param file java.io.File 需要删除的文件对象   
     * @return boolean true = 文件删除成功, false = 文件删除失败  
     */  
     public boolean delFileOnNoE(File file){   
         try{   
             return file.delete();   
         }catch (Exception e) {   
             e.printStackTrace();   
             return false;   
         }   
     }   
        
     /**  
      * 可以抛出异常的文件删除  
      * @param file java.io.File 需要删除的文件对象   
      * @return boolean true = 文件删除成功, false = 文件删除失败   
      */  
     public boolean delFileOnE(File file) throws Exception{   
         try{   
             if (file.delete()) {   
                 return true;   
             }else {   
                 throw new Exception("不能删除文件"+file.getPath()+File.separator+file.getName());   
             }   
         }catch (Exception e) {   
             e.printStackTrace();   
             throw new Exception("删除文件异常"+e.getMessage());   
         }   
     }   
        
         
     /**  
      * 根据路径删除文件  
      * @param filePathAndName String 文件路径及名称   
      * @return boolean (true= 删除成功,false= 删除失败)  
      */  
      public boolean delFile(String filePathAndName) {   
          try {   
              String filePath = filePathAndName;   
              java.io.File myDelFile = new java.io.File(filePath);   
              if (!myDelFile.delete()) {   
                  throw new Exception ("删除文件失败");   
              }   
              return true;   
          }catch (Exception e) {   
              System.out.println("删除文件操作出错");   
              e.printStackTrace();   
              return false;   
          }   
      }   
         
     /**  
      * 根据路径删除文件夹  
      * @param path String 文件夹路径  
      * @param isThrowException boolean (true = 删除文件出错时抛出异常,false = 删除文件出错时不抛出异常,继续执行)  
      * @param isDel boolean (true= 删除整个文件夹, false=只删除文件夹里的所有内容)  
      * @return long (当isThrowException为false时:0 = 删除文件夹成功,>0 表示删除文件夹下边的文件时,出错的个数  
      *               当isThrowException为true时:0 = 删除文件夹成功,当删除出错时会抛出异常)  
      * @exception  
      */  
      private long delFileOp(String path,boolean isDel,boolean isThrowException)throws Exception {   
          long flag = 0l;   
          try {   
              File dir = new File(path);//获得该文件夹   
              if (dir.exists() && dir.isDirectory()) {   
                  File[] dirAndFiles = dir.listFiles();//返回此抽象路径中的文件和目录   
                  for (int i=0; i<dirAndFiles.length; i++) {   
                      if (dirAndFiles[i].isDirectory()) {   
                          flag += delFileOp(dirAndFiles[i].getAbsolutePath(),true,isThrowException);//要删除子文件夹里的所有内容   
                      }else {   
                          if (isThrowException) {   
                              if (!this.delFileOnE(dirAndFiles[i])) {   
                                  flag++;   
                              }   
                          }else{   
                              if (!this.delFileOnNoE(dirAndFiles[i])) {   
                                  flag++;   
                              }   
                          }   
                      }   
                  }   
                  if (dir.listFiles().length==0 && isDel) {//删除自身是空的文件夹   
                     if (isThrowException) {   
                          if (!this.delFileOnE(dir)) {   
                              flag++;   
                          }   
                      }else{   
                          if (!this.delFileOnNoE(dir)) {   
                              flag++;   
                          }   
                      }   
                 }   
             }   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("删除文件夹出错"+e.getMessage());   
          }   
          return flag;   
      }   
         
      /**  
       * 根据路径删除文件夹里的内容  
       * @param folderPath String 文件夹路径  
       * @param isThrowException boolean (true = 删除文件出错时抛出异常,false = 删除文件出错时不抛出异常,继续执行)  
       * @return long (当isThrowException为false时:0 = 删除文件夹成功,>0 表示删除文件夹下边的文件时,出错的个数  
       *               当isThrowException为true时: 0 = 删除文件夹成功,当删除出错时会抛出异常)  
       * @throws Exception   
       */  
      public long delFolderContent(String folderPath,boolean isThrowException) throws Exception {   
          try {   
              return delFileOp(folderPath,false,isThrowException); //删除完里面所有内容   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("删除文件夹内容出错"+e.getMessage());   
          }   
      }    
         
      /**  
       * 根据路径删除文件夹  
       * @param filePathAndName String 文件夹路径及名称  
       * @param isThrowException boolean (true = 删除文件出错时抛出异常,false = 删除文件出错时不抛出异常,继续执行)  
       * @return long (当isThrowException为false时:0 = 删除文件夹成功,>0 表示删除文件夹下边的文件时,出错的个数  
       *               当isThrowException为true时:0 = 删除文件夹成功,当删除出错时会抛出异常)  
       * @exception  
       */  
      public long delFolder(String folderPath,boolean isThrowException) throws Exception {   
          try {   
              return delFileOp(folderPath,true,isThrowException); //删除完里面所有内容   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("删除文件夹出错"+e.getMessage());   
          }   
      }   
  
      /**  
       * 复制单个文件  
       * @param oldPath String 原文件路径 得包括文件名  
       * @param newPath String 目标路径 得包括文件名  
       */  
      public void copyFile(String oldPath, String newPath) throws Exception{   
          int b = 0;   
          try {   
              File oldFile = new File(oldPath);   
              if (oldFile.exists()) {//文件存在时   
                  InputStream ins = new FileInputStream(oldPath);   
                  FileOutputStream fs = new FileOutputStream(newPath);   
                  byte[] buffer = new byte[1024];   
                  while ((b = ins.read(buffer)) != -1) {//一次读入1024个字节 如果效率低可以重新改变缓冲区大小   
                     fs.write(buffer, 0, b);   
                  }   
                  fs.flush();   
                  fs.close();   
                  ins.close();   
              }   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("复制单个文件操作出错");   
          }   
      }   
  
      /**  
       * 复制文件夹到另一个目录  
       * @param copyPath String 原文件夹路径  
       * @param targetPath String 目标文件夹路径  
       * @param isCopy boolean true=复制文件夹到另一个目录,false=只复制文件夹下面的文件到另一个目录  
       * @return boolean  
       */  
      private void copyFolderOp(String copyPath, String targetPath,boolean isCopy) throws Exception {   
          FileInputStream ins = null;   
          FileOutputStream os = null;   
          int len = 0;   
          try {   
              File copyFolder = new File(copyPath);   
              File targetFolder = new File(targetPath);   
              File newFolder = null;   
              if(!targetFolder.exists() && !targetFolder.mkdirs()) {//如果目标路径不存在,则建立目标路径   
                  throw new Exception ("文件夹:"+targetPath+"建立失败");   
              }   
              if (copyFolder.exists() && copyFolder.isDirectory()) {   
                  if (isCopy) {   
                      newFolder = this.newFolderAndPath(targetPath +File.separator+ copyFolder.getName());//在目标文件夹内建立原文件夹   
                  }else {   
                      newFolder = targetFolder;   
                  }   
                  File [] oldFiles = copyFolder.listFiles();   
                  for (int i=0; i <oldFiles.length; i++) {   
                     if(oldFiles[i].isFile()){   
                          this.copyFile(oldFiles[i].getPath(),newFolder.getPath()+ File.separator +oldFiles[i].getName());   
                     }else {//如果是子文件夹   
                         copyFolderOp(oldFiles[i].getPath(),newFolder.getPath(),true);   
                     }   
                  }   
              }   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("复制整个文件夹出错");   
          }   
      }   
         
      /**  
       * 复制文件夹里的内容到指定目录  
       * @param copyPath String 原文件夹路径  
       * @param targetPath String 目标文件夹路径  
       * @throws Exception   
       */  
      public void copyFolderContent(String copyPath, String targetPath) throws Exception {   
          try{   
              copyFolderOp(copyPath,targetPath,false);   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("复制文件夹"+copyPath+"里的内容,到"+targetPath+"目录出错");   
          }   
      }   
         
      /**  
       * 复制整个文件夹到指定目录  
       * @param copyPath  
       * @param targetPath  
       * @throws Exception  
       */  
      public void copyAllFolder(String copyPath, String targetPath) throws Exception {   
          try{   
              copyFolderOp(copyPath,targetPath,true);   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("复制整个文件夹"+copyPath+",到"+targetPath+"目录出错");   
          }   
      }   
         
         
      /**  
       * 移动文件到指定目录  
       * @param oldPath String   
       * @param newPath String   
       */  
      public void moveFile(String oldPath, String newPath) throws Exception {   
          try{   
              copyFile(oldPath, newPath);   
              delFile(oldPath);   
          }catch (Exception e) {   
              e.printStackTrace();   
              throw new Exception ("移动文件"+oldPath+"到"+newPath+"出错");   
          }   
      }   
  
      /**  
       * 移动文件夹到指定目录  
       * @param oldPath String  
       * @param newPath String  
       */  
      public void moveFolder(String oldPath, String newPath) throws Exception {   
          try{   
              copyFolderOp(oldPath, newPath,true);   
              delFolder(oldPath,false);   
          }catch(Exception e) {   
              e.printStackTrace();   
              throw new Exception ("移动文件夹"+oldPath+"到"+newPath+"出错");   
          }   
      }   
       
   /**  
    * @param args  
    */  
       
    public static void main(String[] args){   
        FileUtil fu = new FileUtil();   
        try{   
            fu.newFile("E:\\test\\test.html", "<html><head><title></title></head><body><a href="http://www.sina.com" mce_href="http://www.sina.com" >测试</a></body></html>");   
            fu.copyAllFolder("E:\\test", "E:\\tmp");   
            fu.delFolder("E:\\tmp\\test",true);   
        }catch(Exception e) {   
            e.printStackTrace();   
        }   
    }   
       

 

分享到:
评论

相关推荐

    文件资源管理器(java)文件打开删除复制粘贴等

    实现这一功能,我们需要结合复制和删除操作,确保正确地将文件移动到新位置,同时处理可能出现的错误情况,如目标位置已存在同名文件。 在构建这样的文件资源管理器时,界面设计也是一个关键部分。可以使用JavaFX或...

    Java移动文件夹及其所有子文件与子文件夹

    Java移动文件夹及其所有子文件与子文件夹是Java编程语言中的一种常见操作,在实际开发中经常会遇到这种需求。下面我们将详细介绍如何使用Java移动文件夹及其所有子文件与子文件夹。 移动文件夹及其所有子文件与子...

    操作系统文件管理实验报告(1).doc

    4. 对所创建文件或文件夹执行复制、移动、重命名、删除、恢复、创建快捷方式及设置共享等操作。 实验步骤: (一)文件与文件夹管理 1. 展开与折叠文件夹。 2. 改变文件显示方式。 3. 建立树状目录。 4. 创建 ...

    操作系统文件系统

    文件管理的命令集通常包括创建、删除、移动、重命名、查看属性以及搜索文件等操作。比如,"mkdir"用于创建新目录,"rm"用于删除文件或目录(需谨慎使用,因为删除的文件通常无法恢复),"touch"用于创建新文件或更新...

    网盘源码-实现部分功能(JAVA)

    4. **文件管理**:包括文件的移动、复制、重命名、删除等操作。 5. **文件共享**:用户可以将文件或文件夹的链接分享给其他人,实现协同工作。 6. **版本控制**:允许用户查看和恢复文件的历史版本,防止误删或误改...

    Win-TC 程序应用

    2. **增强的文件操作**:除了基本的复制、移动、删除文件和目录,Win-TC还支持批量重命名、搜索、比较文件等高级功能。 3. **颜色编码**:在显示文件列表时,Win-TC可以按照文件类型用不同颜色区分,使得文件管理...

     一.JAVA程序传送到手机的方法:

    打开文件夹把两个文件都移动到手机自身的"其他文件夹"  最后,在待机状态下输入*#9998*4678255#,点JAD,然后安装。注意必须是有JAD文件 的,一定要是存在本机(切记是本机)的其他文件夹里。  3)联想i908JAVA...

    一个文件批量处理器源码

    批量复制允许用户选择多个文件或文件夹,然后将它们的副本放置在另一个位置,而剪切则会移动原始文件,腾出原位置的空间。在实现时,需要考虑到文件路径的处理、选中文件的遍历以及目标位置的确定。 2. 批量重命名...

    基于JAVA的RSA文件加密软件的设计与实现.zip

    文件加密软件指的是以某种特殊的算法改变原有的信息数据,使得未...软件采用了成熟先进的加密算法、加密方法和文件系统底层驱动,使文件加密和文件夹加密后的达到超高的加密强度,并且还能够防止被删除、复制和移动。

    创建文件和目录1.rar.rar

    在实际工作中,我们还可能需要涉及到文件权限设置、文件复制移动、文件删除等操作,这些都是建立在文件和目录创建的基础上的。因此,对于这些基本操作的理解和熟练程度,直接影响到我们在IT领域的专业素养和工作效率...

    先电云计算软件服务-云存储网盘Android移动应用开发手册-Cloud-SaaS-Mobile-v2.0.pdf

    2. 文件操作功能:提供获取文件列表、分类、上传、新建、拍照上传、移动、复制、下载、删除、还原、打开和查找等操作。 3. 文件管理:支持不同格式的文件(如文档、图片、视频等)的管理。 4. 新建文件夹和上传文件...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型...

    手机蓝牙ftp管理器

    手机蓝牙FTP管理器支持多种文件操作,如新建、删除、重命名和移动文件或文件夹。此外,它还可能提供文件预览功能,让用户在传输前检查文件内容。 对于【标签】中的“手机”,这里指的是智能手机,它们通常配备有...

    2021-2022计算机二级等级考试试题及答案No.9131.docx

    题目中提到“在WINDOWS98中,对文件夹也有类似于文件一样的复制、移动、重新命名以及删除等操作,但其操作方法与对文件的操作方法是不相同的。”这一说法是错误的。实际上,在Windows系统中,对文件夹的操作与对文件...

    第6章 目录与文件

    例如,在Unix/Linux中,`cd`命令用于切换目录,`ls`用于列出目录内容,`mkdir`创建新目录,`touch`创建新文件,`cp`和`mv`用于复制和移动文件,而`rm`用于删除文件或目录。在Windows中,相应的命令有`cd`, `dir`, `...

Global site tag (gtag.js) - Google Analytics