首先有一个非空的文件夹(内包含子文件夹,子文件夹内包含文件)我将文件夹内的子文件夹拷贝出来,代码如下:public class DirCopy {
private static final Logger logger = Logger.getLogger(DirCopy.class);
public static boolean copy(String file1, String file2) { File in = new File(file1);
File out = new File(file2);
if (!in.exists()) {
logger.error(in.getAbsolutePath() + "源文件路径错误!!!");
return false;
} else {
logger.debug("源文件路径" + in.getAbsolutePath());
logger.debug("目标路径" + out.getAbsolutePath());
}
if (!out.exists())
out.mkdirs();
File[] file = in.listFiles();
FileInputStream fin = null;
FileOutputStream fout = null;
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
try {
fin = new FileInputStream(file[i]);
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
System.out.println("in.name=" + file[i].getName());
try {
fout = new FileOutputStream(new File(file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName()));
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
//System.out.println(file2);
int c;
byte[] b = new byte[1024 * 5];
try {
while ((c = fin.read(b)) != -1) { fout.write(b, 0, c);
System.out.println("复制文件中!");
}
fin.close();
fout.flush();
fout.close();
} catch (IOException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
} else
copy(file1 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName(), file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName());
} return true; }然后删除该文件夹,代码如下:public static void deleteDir(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory())
return; // 检查参数
for (File file : dir.listFiles()) {
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file); // 递规的方式删除文件夹
}
dir.delete();// 删除目录本身
}问题是:删除文件夹时,发现只能删除文件夹中的第一个子文件夹。IO流我查了,发现已经关闭了,用了Unlocker发现文件被占用。后来我改用while(!file.delete)发现文件是可以被删除的,但是要等好久,请大侠解释以上问题
private static final Logger logger = Logger.getLogger(DirCopy.class);
public static boolean copy(String file1, String file2) { File in = new File(file1);
File out = new File(file2);
if (!in.exists()) {
logger.error(in.getAbsolutePath() + "源文件路径错误!!!");
return false;
} else {
logger.debug("源文件路径" + in.getAbsolutePath());
logger.debug("目标路径" + out.getAbsolutePath());
}
if (!out.exists())
out.mkdirs();
File[] file = in.listFiles();
FileInputStream fin = null;
FileOutputStream fout = null;
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
try {
fin = new FileInputStream(file[i]);
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
System.out.println("in.name=" + file[i].getName());
try {
fout = new FileOutputStream(new File(file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName()));
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
//System.out.println(file2);
int c;
byte[] b = new byte[1024 * 5];
try {
while ((c = fin.read(b)) != -1) { fout.write(b, 0, c);
System.out.println("复制文件中!");
}
fin.close();
fout.flush();
fout.close();
} catch (IOException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
} else
copy(file1 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName(), file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName());
} return true; }然后删除该文件夹,代码如下:public static void deleteDir(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory())
return; // 检查参数
for (File file : dir.listFiles()) {
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file); // 递规的方式删除文件夹
}
dir.delete();// 删除目录本身
}问题是:删除文件夹时,发现只能删除文件夹中的第一个子文件夹。IO流我查了,发现已经关闭了,用了Unlocker发现文件被占用。后来我改用while(!file.delete)发现文件是可以被删除的,但是要等好久,请大侠解释以上问题
org.apache.commons.io包的FileUtils类
4行代码就搞定
你是一遍列出来一边删除吧,感觉你的删除可能会多listFiles()结果有影响,可以尝试先list目录到数组中,然后迭代数组进行删除
{
deleteFile(new File("e:\\"));
}
public static void deleteFile(File file)
{
if(file.isFile())
{
file.delete();
}
else
{
File[] files = file.listFiles();
for(File itemFile:files)
{
deleteFile(itemFile);
}
file.delete();
}
}