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

在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:

public static void moveFolder(String oldPath, String newPath) {
  //先复制文件
  copyFolder(oldPath, newPath);
  //则删除源文件,以免复制的时候错乱
  deleteDir(new File(oldPath));
}

不应该直接剪切文件,防止在剪切的时候出错,导致这样那样的问题。
在Java复制文件夹及其所有子文件与子文件夹,在《【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作》(点击打开链接)一文中已经详细说过了。

关键是删除文件夹及其子文件与子文件夹。

在Java中,File类的delete()方法只能删除为空的文件夹或者单个文件,因此必须遍历整个文件夹,先从最内层的文件夹中的文件开始,进行递归删除,具体方法如下:

// 删除某个目录及目录下的所有子目录和文件
public static boolean deleteDir(File dir) {
  // 如果是文件夹
  if (dir.isDirectory()) {
    // 则读出该文件夹下的的所有文件
    String[] children = dir.list();
    // 递归删除目录中的子目录下
    for (int i = 0; i < children.length; i++) {
      // File f=new File(String parent ,String child)
      // parent抽象路径名用于表示目录,child 路径名字符串用于表示目录或文件。
      // 连起来刚好是文件路径
      boolean isDelete = deleteDir(new File(dir, children[i]));
      // 如果删完了,没东西删,isDelete==false的时候,则跳出此时递归
      if (!isDelete) {
        return false;
      }
    }
  }
  // 读到的是一个文件或者是一个空目录,则可以直接删除
  return dir.delete();
}

因此,整个方法连起来就是这个样子,把C盘下的A文件夹及其所有子文件与子文件夹,移动到F盘,并且重新命名:

import java.io.*; 

public class CutTest {
  // 删除某个目录及目录下的所有子目录和文件
  public static boolean deleteDir(File dir) {
    // 如果是文件夹
    if (dir.isDirectory()) {
      // 则读出该文件夹下的的所有文件
      String[] children = dir.list();
      // 递归删除目录中的子目录下
      for (int i = 0; i < children.length; i++) {
        // File f=new File(String parent ,String child)
        // parent抽象路径名用于表示目录,child 路径名字符串用于表示目录或文件。
        // 连起来刚好是文件路径
        boolean isDelete = deleteDir(new File(dir, children[i]));
        // 如果删完了,没东西删,isDelete==false的时候,则跳出此时递归
        if (!isDelete) {
          return false;
        }
      }
    }
    // 读到的是一个文件或者是一个空目录,则可以直接删除
    return dir.delete();
  } 

  // 复制某个目录及目录下的所有子目录和文件到新文件夹
  public static void copyFolder(String oldPath, String newPath) {
    try {
      // 如果文件夹不存在,则建立新文件夹
      (new File(newPath)).mkdirs();
      // 读取整个文件夹的内容到file字符串数组,下面设置一个游标i,不停地向下移开始读这个数组
      File filelist = new File(oldPath);
      String[] file = filelist.list();
      // 要注意,这个temp仅仅是一个临时文件指针
      // 整个程序并没有创建临时文件
      File temp = null;
      for (int i = 0; i < file.length; i++) {
        // 如果oldPath以路径分隔符/或者\结尾,那么则oldPath/文件名就可以了
        // 否则要自己oldPath后面补个路径分隔符再加文件名
        // 谁知道你传递过来的参数是f:/a还是f:/a/啊?
        if (oldPath.endsWith(File.separator)) {
          temp = new File(oldPath + file[i]);
        } else {
          temp = new File(oldPath + File.separator + file[i]);
        } 

        // 如果游标遇到文件
        if (temp.isFile()) {
          FileInputStream input = new FileInputStream(temp);
          // 复制并且改名
          FileOutputStream output = new FileOutputStream(newPath
              + "/" + "rename_" + (temp.getName()).toString());
          byte[] bufferarray = new byte[1024 * 64];
          int prereadlength;
          while ((prereadlength = input.read(bufferarray)) != -1) {
            output.write(bufferarray, 0, prereadlength);
          }
          output.flush();
          output.close();
          input.close();
        }
        // 如果游标遇到文件夹
        if (temp.isDirectory()) {
          copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
        }
      }
    } catch (Exception e) {
      System.out.println("复制整个文件夹内容操作出错");
    }
  } 

  public static void moveFolder(String oldPath, String newPath) {
    // 先复制文件
    copyFolder(oldPath, newPath);
    // 则删除源文件,以免复制的时候错乱
    deleteDir(new File(oldPath));
  } 

  public static void main(String[] args) {
    moveFolder("c:/A", "f:/B");
  } 

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java快速批量移动文件的实现方法

    文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现.但是在Java文件的编程实现中,大多是通过复制文件到目的地,再删除所有文件来实现的.这对于小文件来说看不出什么弊端,但是如果移动几个大的文件,则会使操作缓慢并且浪费系统资源.本实例将通过File类的renameTo()方法直接实现文件的快速移动,哪怕是移动几GB的文件也不会需要等待太长时间. 思路分析: 首先是视图层.在这里有个建议,因为在某些控件的事件中,常常会访问其他控件,且控件的事件方法用到的参

  • java复制文件和java移动文件的示例分享

    复制代码 代码如下: package com.famous.dark.util; import java.io.File;import java.io.FileFilter; public class MyFileFilter implements FileFilter { public boolean accept(File file) {  String fileName = file.getName().toLowerCase();  if (fileName.endsWith(".jar

  • java文件的重命名与移动操作实例代码

    文件的重命名与移动操作 有时候为了对文件进行统一访问与管理,需要把文件进行重命名,并移动到新的文件夹,如何实现呢? 一枚简单的java小程序即可实现: part_1:需求:我需要把<(E:\BaiduYun\传智播客_张孝祥_Java多线程与并发库高级应用视频教程下载)>文件夹下的所有子文件夹下的视频文件重命名,并移动到新的位置<(E:\BaiduYun\张孝祥_Java多线程与并发库)>; part_2:目录结构如下: E:\BaiduYun E:\BaiduYun\传智播客_张

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

    在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明: public static void moveFolder(String oldPath, String newPath) { //先复制文件 copyFolder(oldPath, newPath); //则删除源文件,以免复制的时候错乱 deleteDir(new File(oldPath)); } 不应该直接剪切文件,防止在剪切的时候出错,导致这样那样的问题. 在Java复制文件夹及其所有子文件与子文件夹,在<

  • java 删除文件夹中的所有内容而不删除文件夹本身的实例

    实例如下: package com.xx; import java.io.File; public class Test { public static void main(String[] args) { String fileRoot = "C:/Users/xx/Desktop/xx/xxx"; delFolder(fileRoot); System.out.println("deleted"); } // // 删除完文件后删除文件夹 // // param

  • asp.net遍历文件夹下所有子文件夹并绑定到gridview上的方法

    遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 Helper app_Helper = new Helper(); DataSet ds = new DataSet(); DataTable dt = new DataTable(); protected void Page_Load(object sender, EventArgs e) { gvwBind(); } #region 绑定GridView /// <summary> //

  • Java文件批量重命名批量提取特定类型文件

    原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一个一个找出来太麻烦,所以做了第二个功能. 最近刚刚学了Java文件和流的知识,所以正好练练手,这也是自己的第一个exe程序,分享一下哈. (导出jar文件,以及用工具exe4j生成exe文件,这部分省略了哈) 用到的知识: 用到Java中文件,流的知识,以及简单的GUI知识. 功能: 功能一:去除文

  • Android 开发中layout下的子文件夹

    如果一个项目内有很多个界面,那么在layout下会有太多的activity***.xml文件,这个时候就需要使用文件夹对这些分别存放了. 当然你可以直接在这里新建文件夹,虽然你可以建立好,实际上这不能直接使用,IDE会报错. 最好的方式是你在项目之初,就规划好项目中有多少个模块,以模块为分界. 然后在 app/build.gradle 文件的 android{} 内添加如下代码,点击 sync now 后IDE 会更新加载一次.也许你还需要重新启动一下IDE. sourceSets { main

  • 解决Java 部署Tomcat时使用jni和jna调用DLL文件的问题

    我的前一篇博客提到,我们公司项目的restful框架中要用到底层的DLL C++库,最后经过测试验证结果选择采用JNA方法来调DLL库. 之后基础框架在IDEA中的jetty服务中调试成功,但是在部署到Tomcat上时出现了无法加载DLL库的状况,只能现学现卖了. 一. 把DLL文件放在Tomcat下的方法: 在Tomcat中加载dll,供其它接口调用: 在Tomcat目录根下新建一个文件夹,这里就叫DLL吧,<tomcat_home>/DLL: 把需要用到的dll放入新建的DLL目录下: 编

  • Java实现在Word中嵌入多媒体(视频、音频)文件

    目录 Jar导入(2种方法)  嵌入多媒体文件 注意事项 Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体文件,如视频.音频等.本篇文章将对此作相关介绍. Jar导入(2种方法) 1.通过 Maven 安装 在pom.xml中配置如下内容导入: <repositories> <repository> <id>com.e-

  • C++删除指定文件夹下N天及之前日志文件的方法

    本文实例讲述了C++删除指定文件夹下N天及之前日志文件的方法.分享给大家供大家参考.具体如下: // 功能:删除nDays天及之前的日志文件 // @nDays: 0-不删除日志,3-删除3天及之前的日志(保留今天.昨天.前天的日志) ... void CRecordLog::ClearLog(UINT nDays) // 删除N天前的日志 { if (nDays > 0) { WIN32_FIND_DATA FindFileData; CString sAllFile = m_sLogFold

  • java实现利用String类的简单方法读取xml文件中某个标签中的内容

    1.利用String类提供的indexOf()和substring()快速的获得某个文件中的特定内容 public static void main(String[] args) { // 测试某个词出现的位置 String reqMessage = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + "<in>" + "<head&g

  • Java编程实现获取mp3时长及播放mp3文件的方法

    本文实例讲述了Java编程实现获取mp3时长及播放mp3文件的方法.分享给大家供大家参考,具体如下: 所需包为jaudiotagger-2.2.6-SNAPSHOT.jar 和jl1.0.1.jar . import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import org.jaudiotagger.audio.AudioFileIO; import org.jaudi

随机推荐