删除java中的文件不起作用

时间:2012-01-26 03:06:29

标签: java

我把我从互联网上获得的这段代码放在我的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();
                }
  }
}

2 个答案:

答案 0 :(得分:2)

我不确定你要删除的位置,但是在主要的最后一行:

 fd.delete("person.txt",word); 

不会删除任何内容,因为Object.equals(null)应始终返回false。 (wordnull。)

如果你想在循环中删除:

 // FilingDatabase fd= new FilingDatabase();
 System.out.print("Enter word: ");
 word=in.next();
 //delete("person.txt",word);

它不会删除任何内容,因为delete行已被注释掉。

我不知道如何告诉你有关删除和重命名文件的信息,因为这对我有用。

答案 1 :(得分:2)

我不打算试图了解你的代码......以及它正在尝试做什么。 (你听说过评论吗?Javadocs?你考虑过使用它们吗?)

但是,我想指出deleterename在许多情况下都会失败。在delete案例中,其中包括以下内容:

  • 目标文件不存在
  • 目标文件确实存在,但应用程序无权访问父目录和/或删除文件
  • 目标对象是目录而不是文件
  • (在某些平台上)目标文件被锁定,因为此应用程序或其他应用程序当前打开它。

对于rename,您必须考虑要重命名的文件(及其父目录)的存在,权限等以及您尝试移动的目录。还有一个问题是重命名在不同的文件系统之间不起作用。


不幸的是,这些方法(在File类上)没有说明删除或重命名失败的原因。 (新Java 7 Files类上的方法确实...)即使他们能够这样做,诊断也会受到OS系统调用报告的限制。在Unix / Linux的情况下,这是非常有限的。