在JAVA中删除具有扩展名的文件

3

这是我的一段代码。我选择了一个驱动器,比如说F盘。然后在执行时,我试图删除该文件夹中的一个文件,尽管成功删除了文件(正确输入),但delete()函数返回的却是false。请问为什么会这样?

System.out.println("Enter file to be deleted:");
String del = sc.nextLine(); //give file name as string with extension
File delFile = new File(del); //convert string to file type
for (File fs: listOfFiles) {
    if (fs.getName().compareTo(delFile.getName()) == 0) {
        System.out.println(fs.getName());
        System.out.println("Inside loop");
        boolean dele = fs.delete();
        System.out.println("Successful/unsucceful: " + fs.getName() + "..." + fs.delete());
    } else
        System.out.println("invalid : " + fs.getName());
}

2
最好使用Files.delete() - 当删除出现问题时,它会抛出一个异常 - 这比“false”更有洞察力。 - GhostCat
只是顺便提一下,我会使用 fs.getName().equals(delFile.getName()) 而不是你的 compareTo - Christian
2个回答

6
您的问题在于,您在已经删除fs.delete()之后又第二次调用了它。因为它不存在了,所以无法被删除。
只需调用之前设置的布尔值即可:
System.out.println("Successful/unsucceful: " + fs.getName() + "..." + dele);

另外,顺便提一下。我会使用 fs.getName().equals(delFile.getName()) 而不是你的 compareTo


另外,我会将fs.getName()的返回值存储在一个变量中,而不是调用该函数三次。 - Carlos3dx

3
因为您调用了两次delete。第二次是错误的,因为它已经在第一次被删除了。
请修改此处:
System.out.println("Successful/unsucceful: " + fs.getName() + "..." + fs.delete());

为了

System.out.println("Successful/unsucceful: " + fs.getName() + "..." + dele);

非常感谢您。 - Shailja
我需要输入一个文件名以便删除它。我采用的方法是通过Scanner类获取字符串,然后将其转换为文件类型。 String del = sc.nextLine(); //输入带有扩展名的文件名字符串 File delFile = new File(del); //将字符串转换为文件类型 是否有其他直接获取文件名的方法? - Shailja
@Shailja 从你的代码中我看到你在比较文件名。你不需要构造一个新的 File。直接使用 sc.nextLine 中的文件名即可。 - Murat Karagöz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接