import java.io.File;
import javax.swing.JOptionPane;
public class File6_1 {
public static void deleteFold(String s){
File fl1=new File(s);
if(fl1.exists()){
System.out.println("目录(" +s+")存在");
if(fl1.delete()){
System.out.println("该目录删除成功");
}else{
//System.out.println("该目录删除失败");//表明该文件夹下存在文件
System.out.println("目录(" +fl1.getName()+ ")下还有文件,将一起删除!");
File[] file=fl1.listFiles();
for(int i=0;i<file.length;i++){
if (!file[i].canRead()) {
continue;
}
if (!file[i].canWrite()) {
continue;
}
if (file[i].isHidden()) {//这是为了防止碰上类似系统文件导致出现错误
continue;
}
if(file[i].isFile()){
System.out.println("删除文件:" +file[i].getName()+ "中……");
file[i].delete();
}
if(file[i].isDirectory()){
deleteFold(file[i].getAbsolutePath());
}
}
//该文件夹下的文件都删除后,就可以删除该文件夹了
if(fl1.delete()){
System.out.println("目录(" +fl1.getName()+ ")删除成功");
}else{
System.out.println("目录(" +fl1.getName()+ ")删除失败");
}
}
}else{
System.out.println("目录(" +s+")不存在");
}
}
public static void main(String[] args){
String s=JOptionPane.showInputDialog("请输入要删除的目录");
deleteFold(s);
JOptionPane.showMessageDialog(null,"程序执行完毕!");
}
}
以上代码在删除文件的时候,如果把if (file[i].isHidden()) {//这是为了防止碰上类似系统文件导致出现错误
continue;
}当搜索到类似System Volume Information这些系统文件夹的时候就会抛出异常,即便程序中已经加入了if (!file[i].canRead()) {
continue;
}
if (!file[i].canWrite()) {
continue;
}
等判断其是否可读,可写。所以特别想问下,如果让java跳过这些不可读的系统文件;另外还有个问题就是,如何判断一个文件是否被另一个程序使用,因为使用状态下也是无法删除的,谢谢!
解决方案 »
- 毕业设计C#语言实现信息隐藏技术
- 请教null的问题
- 想看些java的电子书籍,不知道哪里资源比较丰富啊?
- 请大家释疑
- 有关setAttribute的问题
- 产生的随机数如何避免重复的数出现?????
- 在构造方法中将this传递给另外一个线程的疑问
- 请问applet中当达到某一条件关系后,想要本网页重新载入另一个applet,怎么实现?
- 存储过程调用出错?帮帮偶。
- 当你浏览这个网页时,就将 xxx.exe文件从远程服务器 拷到 我的电脑某个目录c:\下,-----源代码----感激不尽,感激不尽---!!!
- java socket 多人单对单聊天 客户端的接受问题
- ——求助:drawPolygon的问题,总是显示不出来想要的效果————
所以,正常的删除方法是遍历该目录下的所有子目录及文件,而遍历的方法,简单一点,直接用递归,好一点的,用栈。
通过FileChannel.lock或FileChannel.tryLock来实现文件加锁,它是通过操作系统的底层机制完成的,所以可以实现上述要求。如果文件正被另一个程序使用,会一直阻塞。也可以用带超时的locklz仔细看一下API吧
canRead的说明中有
抛出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒绝对文件进行读取访问
嘿嘿,canRead也可能抛出异常的。其实抛出也没关系啊,你在可能抛出异常的地方加上一层try-catch,不就行了
目录(e:\\System Volume Information)存在
目录(System Volume Information)下还有文件!
Exception in thread "main" java.lang.NullPointerException
at io.file.File6_2.selectFold(File6_2.java:17)
at io.file.File6_2.selectFold(File6_2.java:35)
at io.file.File6_2.main(File6_2.java:45)