JAVA File类 删除文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA File类 删除文件相关的知识,希望对你有一定的参考价值。

参考技术A 你程序中有个错误,并且逻辑有问题,代码修改了,如下:
public class Test2001
private static String s;
public static void main(String[] args)
test1();// 删除文件

private static void test1()
System.out.println("请输入你要删除的文件名");
s = new Scanner(System.in).next();
File file = new File("E:/");
deleteFile(file);

private static void deleteFile(File file)
File Array[] = file.listFiles();
for (File f : Array)
if (f.isFile()) // 如果是文件
if (f.getName().equals(s))
f.delete();
System.out.println("删除文件成功");
return;



System.out.println("删除文件失败,该文件不存在");

1.错误

判断文件名是否相等:if(f.getName()==s)

字符串判断值是否相等使用equals方法,==是比较内存地址,所以你的for一直匹对不到相同文件
2.
逻辑错误

private static void deleteFile(File file)
File Array[] = file.listFiles();
for (File f : Array)
if (f.isFile()) // 如果是文件
if (f.getName() == s) // 这里已经在比较文件是否相等
f.delete();
System.out.println("删除文件成功");
break;
else // 如果不是要删除的文件,跳到下一次循环
continue;

else // 如果不是文件
deleteFile(file); // 这里


System.out.println("删除文件失败,该文件不存在");
if
(f.isFile())
//
如果是文件


else
//
如果不是文件
deleteFile(file);
//
这里不需要再次deleteFile,只会迭代,按钮的逻辑,不是文件,就跳过,应该是continue

亲,如果回答满意,请即时采纳,你的理解是我回答的动力,谢谢!!!

JAVA File类(文件的遍历,创建,删除)

 

File类构造函数

	File f1=new File("H://asc//");//传入文件/目录的路径
		File f2=new File(f1,"test.txt");//第一个参数为一个目录文件,第二个参数为要在当前f1目录下要创建的文件
	
		

 

file.list();  获得file文件夹下所有文件/目录的字符串数组

	String []liStrings=f1.list();
		for (int i = 0; i < liStrings.length; i++) {
			System.out.println(liStrings[i]);
		}
		
	 

利用list()函数遍历文件夹,递归显示文件夹下的文件/文件夹

public static void dfs(String filename) { // java 中区分大小写 String类首字母大写

		File f = new File(filename);
		String namelist[] = f.list();
		for (int i = 0; i < namelist.length; i++) {
			File fchild = new File(filename + "/" + namelist[i]);
			for (int j = 0; j < deep; j++)
				System.out.print("   ");
			if (!fchild.isDirectory())
				System.out.println(namelist[i]);// 文件 打印
			else {// 目录
				System.out.println(namelist[i] + "/");// 先打印 再递归调用本身
				dfs(filename + "/" + namelist[i]);
			}
		}
	}

  

 

 

file.isFile()判断当前file文件是否是文件    file.isDirectory()是否为目录     file.exist(); 此文件或者目录是否存在

		File f1=new File("H://asc//");//
		File f2=new File(f1,"test.txt");//
		File f3=new File("H://notexistdir");
//	
		System.out.println(f1.isFile());
		System.out.println(f2.isFile());
		System.out.println(f3.isFile());
		
		System.out.println(f1.isDirectory());
		System.out.println(f2.isDirectory());
		
		System.out.println(f3.exists());
 //运行结果:
false
true
false
true
false
false

  

  

文件/目录的创建,删除

函数file.createNewFile()  创建此File对象文件 如果file之间已经存在,createNewFile 返回fasle 创建文件失败

函数 file.mkdir() 创建文件目录  ,此函数有个缺点 就是只能在已存在的路径下创建文件夹 如果你的File对象路径在电脑中不存在 则会创建失败。而使用 file.mkdirs() 即使文件路径不存在 函数会自动创建相应的文件夹目录 保证file对象的创建成功,

建议使用mkdirs()来创建文件夹

	public void creatnewfile(String path) {// 创建新文件\目录
		File file = new File(path); 
		if (file.exists()) { //判断此路径下的文件存在否
			System.out.println("此文件已经存在!");
			return;
		}
		System.out.println("创建此路径下的文件/目录?");
		System.out.println("输入1创建文件目录                 输入2 创建文件 ");

		Scanner scanner = new Scanner(System.in);
		int j = scanner.nextInt();
		if (j == 2) {
			try {
				file.createNewFile();//创建文件
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			file.mkdirs();//创建目录
		}
	}

  file.delete()可实现文件/文件夹的删除 ,delete()函数虽然可以删除文件 ,但是在文件夹的删除上,只能实现对空目录的删除,如果你要删除的文件夹下面有文件/文件夹 则会删除失败

  如果要实现对此类文件夹的删除 可以使用dfs遍历文件目录 +delete()实现

    public boolean deleteFile(String path) {// 删除文件|目录(连联删除)
        File file = new File(path);
        if (!file.exists()) {
            System.out.println("文件不存在!");
            return false;
        }        
        dfsdelete(path);
        return true;
    }

    public void dfsdelete(String path) {
        File file=new File(path);
        if(file.isFile()) {//如果此file对象是文件的话,直接删除
            file.delete();
            return;
        }
        //当 file是文件夹的话,先得到文件夹下对应文件的string数组 ,递归调用本身,实现深度优先删除
            String [] list=file.list();
            for (int i = 0; i < list.length; i++) {
                dfsdelete(path+File.separator+list[i]);
                
            }//当把文件夹内所有文件删完后,此文件夹已然是一个空文件夹,可以使用delete()直接删除
            file.delete();
        return;
    }
    

 


以上是关于JAVA File类 删除文件的主要内容,如果未能解决你的问题,请参考以下文章

JAVA File类 删除文件

JAVA File类(文件的遍历,创建,删除)

Java File 类 文件的常用操作(递归遍历所有文件,统计文件大小,删除文件)

Java File类学习 <二>

用java控制流实现文件复制后,不能删除文件

Java文件File操作一:文件的创建和删除