我把我从互联网上获得的这段代码放在我的java程序中,但是当我尝试删除时,原始文件无法删除,临时文件也无法重命名为原始文件。这两个文件仍保留在文件夹内容不变。
...
public class FilingDatabase {
public static void main(String[]args)throws IOException{
(new FilingDatabase()).run();
FilingDatabase fd=new FilingDatabase();
String word = null;
fd.delete("person.txt",word);
}
public void run() throws IOException{
File file=new File("person.txt");
BufferedReader br=new BufferedReader(new FileReader(file));
while((str=br.readLine())!=null)
i++;
System.out.print("\t\t\t\t\t\t***************WELCOME*****************");
System.out.println();
System.out.println("1. Add \n2. Edit \n3. Delete \n4. Exit");
System.out.print("\nEnter option number: ");
option=in.next();
while(true){
...
else if(option.charAt(0)=='3'){
// FilingDatabase fd= new FilingDatabase();
System.out.print("Enter word: ");
word=in.next();
//delete("person.txt",word);
}
...
}
}//end of fxn run()
...
public void delete(String file, String lineToRemove) throws IOException{
try {
File inFile = new File(file);
if (!inFile.isFile()){
System.out.println("File does not exist");
return;
}
File tempFile = new File(inFile.getAbsolutePath() + ".tmp");
BufferedReader br = new BufferedReader(new FileReader(file));
//Scanner br=new Scanner(file);
PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
String line = null;
while ((line = br.readLine()) != null) {
if (!line.trim().equals(lineToRemove)) {
pw.println(line);
pw.flush();
}
}
pw.close();
br.close();
if (!inFile.delete()) {
System.out.println("Could not delete file");
return;
}
if (!tempFile.renameTo(inFile))
System.out.println("Could not rename file");
}catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
我不确定你要删除的位置,但是在主要的最后一行:
fd.delete("person.txt",word);
不会删除任何内容,因为Object.equals(null)
应始终返回false
。 (word
为null
。)
如果你想在循环中删除:
// FilingDatabase fd= new FilingDatabase();
System.out.print("Enter word: ");
word=in.next();
//delete("person.txt",word);
它不会删除任何内容,因为delete
行已被注释掉。
我不知道如何告诉你有关删除和重命名文件的信息,因为这对我有用。
答案 1 :(得分:2)
我不打算试图了解你的代码......以及它正在尝试做什么。 (你听说过评论吗?Javadocs?你考虑过使用它们吗?)
但是,我想指出delete
和rename
在许多情况下都会失败。在delete
案例中,其中包括以下内容:
对于rename
,您必须考虑要重命名的文件(及其父目录)的存在,权限等以及您尝试移动的目录。还有一个问题是重命名在不同的文件系统之间不起作用。
不幸的是,这些方法(在File
类上)没有说明删除或重命名失败的原因。 (新Java 7 Files
类上的方法确实...)即使他们能够这样做,诊断也会受到OS系统调用报告的限制。在Unix / Linux的情况下,这是非常有限的。