问题描述
我知道这个问题已经在这个网站上被问过和回答过很多次了。基本的解决方案是: (1) 确保文件已关闭。 (2) 确保程序有绝对路径。
就 (1) 而言,我将项目从 OneDrive 文件夹中取出(通常会尝试将其同步到云),并确保关闭读取文件的扫描仪。依然没有。
对于(2),该文件与项目位于同一目录中。此外,我使用了 getAbsoluteFile()
方法并将其分配给我的 file
变量。 (我也试过了,还是不行)。
我在 Windows 上操作。
File file = new File(newFile);
Scanner printer = new Scanner(file);
while (printer.hasNextLine()) {
String line = printer.nextLine();
System.out.println(line);
}
printer.close();
try {
boolean deleted = file.delete();
if (deleted)
System.out.println("The file has been successfully deleted.");
else
System.out.println("The file has not been deleted.");
} catch (Exception e) {
System.out.println(e.getMessage());
}
解决方法
考虑在 try 结构中插入 while 循环
import java.io.File;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws ParseException,FileNotFoundException {
File file = new File("newFile.txt");
Scanner printer=null;
try {
printer = new Scanner(file);
while (printer.hasNextLine()) {
String line = printer.nextLine();
System.out.println(line);
}
printer.close();
boolean deleted = file.delete();
if (deleted)
System.out.println("The file has been successfully deleted.");
else
System.out.println("The file has not been deleted.");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
finally {
}
}
}
,
Files / NIO 调用通常会提供比 File / IO 更好的错误消息 - 包括无法删除文件的原因,因此尝试将 file.delete()
替换为:
Files.delete(file.toPath());
如果您看到文件仅在 VM 退出或无法删除时删除,则可能的原因是您的代码未正确清除资源。因为您没有将 try()
与资源一起使用,所以您的文件处理的另一部分(或文件流)可能会出错,该部分未能进行适当的清理并阻止了此次删除。