Java 为什么File.delete()方法不起作用?
由于Java 为什么File.delete()方法不起作用?,java,file,netbeans,Java,File,Netbeans,由于registry.delete()method没有删除文件“registry.txt”,因此我在查找该漏洞的过程中几乎两天都很沮丧。我使用的是GUI,每次我点击一行JTable,然后点击“Ban”按钮,它都不会删除文件“Registry.txt”,也不会写!但是,如果我从另一个类执行此操作,例如具有main()方法的类,它会正确清除。我想做的是从Registry.txt中删除一行,在另一个.txt文件中写入不包含特定字符串的所有行名称,然后将其重命名为name Registry.txt。我不
registry.delete()
method没有删除文件“registry.txt”,因此我在查找该漏洞的过程中几乎两天都很沮丧。我使用的是GUI,每次我点击一行JTable
,然后点击“Ban”按钮,它都不会删除文件“Registry.txt”,也不会写!但是,如果我从另一个类执行此操作,例如具有main()
方法的类,它会正确清除。我想做的是从Registry.txt中删除一行,在另一个.txt文件中写入不包含特定字符串的所有行
名称,然后将其重命名为name Registry.txt。我不知道发生了什么事。下面是我的代码:
ActionListener ban = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int fila = table.getSelectedRow();
String nombre = (String) modelo.getValueAt(fila, 0);
modelo.removeRow(fila);
try {
removeUser(nombre);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
};
btnBanear.addActionListener(ban);
...
public void removeUser(String nombre) throws IOException {
String lee = null;
String usuario = "";
CharSequence aux = nombre;
try {
registro = new File("Registro.txt");
tempFile = new File("Registro1.txt");
lector = new BufferedReader(new FileReader(registro));
fw = new FileWriter(tempFile);
writer = new BufferedWriter(fw);
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println(ex.getMessage());
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
while ((lee = lector.readLine()) != null) {
System.out.println(aux);
if (lee.contains(nombre)) {
continue;
} else {
writer.write(lee);
}
}
lector.close();
fw.close();
writer.close();
registro.delete();
}
我不认为我们有足够的数据来确切了解为什么会发生这种情况,但我可以给你们一些强烈的怀疑
File.delete()
抛出四种可能的异常;其中三个在这里适用NoSuchFileException
(值得特别检查)、IOException
和SecurityException
NoSuchFileException
派生自IOException
,无论如何都会被捕获;尽管您可能仍然希望捕获它,因为将其强制转换为IOException
将删除相关数据SecurityException
通常是当安全管理器挡道时,这种情况在基于web的程序上经常发生。我想知道你的文件是一个applet还是它的现代等价物,web应用程序SecurityException
是一个RuntimeException
,因此您不必捕获它,但您可以而且可能应该捕获它。这可以解释世界
最后,还可以使用File.deleteIfExists()
。如果要删除的文件实际存在,则返回true值;如果找不到,则返回false值。值得一看,因为如果您的路径倾斜,并且在提供的位置找不到该文件,那么它将不会被删除。有理由认为您的程序的工作目录可能与您想象的不同。不过,这与检查NoSuchFileException
大致相同
当然,您甚至可以使用System.out.println(System.getProperty(“user.dir”))
检查工作目录
我的钱在
SecurityException
上,或者路径错误。但是,如果我错了,如果你能给我们看一下你的其他按钮代码,那就太好了,因为那里可能也有相关的问题。“每次我点击一行JTable,然后点击“Ban”按钮,我都会有兴趣看到一个可运行的示例,它演示了工作流程,因为它很可能是(开始)对于这个问题,我还建议您在创建文件资源未关闭的可能场景时,看看是否正确创建/更新Registro1.txt?我想知道动作侦听器线程的CWD是否与您预期的不同。请下次缩进您的代码。这一个是在房子上:-)