资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

怎么在Java移动文件夹

这篇文章主要介绍“怎么在Java移动文件夹”,在日常操作中,相信很多人在怎么在Java移动文件夹问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Java移动文件夹”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联是一家专业提供青田企业网站建设,专注与成都网站设计、成都做网站、html5、小程序制作等业务。10年已为青田众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

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

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

不应该直接剪切文件,防止在剪切的时候出错,导致这样那样的问题。
在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"); 
  } 
 
}

到此,关于“怎么在Java移动文件夹”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网页标题:怎么在Java移动文件夹
标题网址:http://cdkjz.cn/article/ggchph.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220