Java移动文件夹及其所有子文件与子文件夹
作者:yongh701 发布时间:2023-08-01 09:53:38
标签: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");
}
}
来源:http://blog.csdn.net/yongh701/article/details/45070353
0
投稿
猜你喜欢
- 本文实例为大家分享了iOS新浪微博分享功能的具体代码,供大家参考,具体内容如下做新浪分享 需先去http://open.weibo.com/
- 1、mybatis-plus @DS实现动态切换数据源原理首先mybatis-plus使用com.baomidou.dynamic.data
- 如果想实现一个在桌面显示的悬浮窗,用Dialog、PopupWindow、Toast等已经不能实现了,他们基本都是在Activity之上显示
- 目录前言1. 不受待见的空指针异常2. 糟糕的代码3. 解决空指针的"银弹"4. Optional使用入门(1)创建Op
- 前言虽然从学java的第一个程序——helloworld至今,已经有好几个年头了。当时自己找资料,看视频,学习了java的输入输出流,多线程
- 1、前言当提及如何终止一个线程时,部分读者通常立马想到的方法肯定是stop(),但是stop()方法并不被推荐使用(很多规范中是禁止使用的)
- 本文实例为大家分享了OpenCV实现人脸识别程序的具体代码,供大家参考,具体内容如下//Haar特征检测,人脸识别算法,是用xml作为训练后
- [LeetCode] 2. Add Two Numbers 两个数字相加You are given two non-empty&n
- 如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用CountDownTimer定时器简单封装下此效果,方便我们
- 仅供学习交流,禁止商业用途。如侵害利益,联系必删!前言最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题。一、案
- 问题:在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码。原因其实很简单,就是系统的编码和程序的编码采用了不
- 图像滤波在opencv中可以有多种实现形式自定义滤波如使用3×3的掩模:对图像进行处理.使用函数filter2D()实现#include&l
- 前言RefreshIndicator是Flutter里常见的下拉刷新组件,使用是比较方便的。但由于产品兄弟对其固定的刷新样式很是不满,而且代
- 什么是volatile关键字volatile是Java中用于修饰变量的关键字,其可以保证该变量的可见性以及顺序性,但是无法保证原子性。更准确
- 通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置<TextView android:layout_widt
- 本文实例为大家分享了Android实现支付宝支付密码输入界面的具体代码,供大家参考,具体内容如下效果图:主要代码:import java.u
- 序言在flutter开发中,我们使用 bloc 框架,基于状态变更进行响应式开发。本篇文章,小轰将 bloc 核心业务块进行拆解简化,聊一聊
- SharedPreferences介绍:SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置
- 在实际开发中,我们经常会需要在页面跳转的时候携带路由参数,典型的例子就是从列表到详情页的时候,需要携带详情的 id,以便详情页获取对应的数据
- 接收JSON浏览器传来的参数,可以是 key/value 形式的,也可以是一个 JSON 字符串。在 Jsp/Servlet 中,我们接收