【问题标题】:How to delete a file from a directory using Java?如何使用Java从目录中删除文件?
【发布时间】:2011-04-13 19:00:24
【问题描述】:

谁能告诉我如何在打开并加载到数据库后删除目录中的文件?

这是我的代码:

public static void main(String[] args) throws SQLException{

        int Count= 0;

        File directory = new File("C://Documents and Settings//welcome//My Documents//Bluetooth Exchange Folder");
        directory.deleteOnExit();
        File files[] = directory.listFiles();

        for(int index = 0; index < files.length; index++){

            try {

                FileReader inp = new FileReader (files[index]);
                BufferedReader buf = new BufferedReader(inp);
                String strLine;

                try {
                    while ((strLine = buf.readLine()) != null)
                    {
                        System.out.println(strLine);

                        String[] dbColumnValues = strLine.split("%");

                        Connect.DoInsertIntoDB(Long.parseLong(dbColumnValues[0]),dbColumnValues[1],dbColumnValues[2], dbColumnValues[3]);
                        Count++;
                        System.out.println(Count + " Row(s) are inserted into the Database");
                        GenHTML.gen();

                    }

                } 

但是目录中的文件并没有被删除。 请问有人可以纠正我的代码中的错误吗?

[目前,我正在测试目录中的 3 个文件。将每个文件加载到数据库后,我希望将每个文件从目录中删除。]

提前致谢!

【问题讨论】:

    标签: java file


    【解决方案1】:

    最好在代码中明确。

    File files[] = directory.listFiles();
    for(int index = 0; index < files.length; index++){
    {
       // Process files[index]
       // ...
       boolean wasDeleted = files[index].delete();
       if (!wasDeleted)
       {
         // Deal with error
       }
    }
    

    此外,您需要在完成后关闭文件句柄

    FileReader inp = new FileReader (files[index]);
    try
    {
      // ...
    }
    finally
    {
      inp.close();
    }
    

    【讨论】:

    • 你应该closeBufferedReader,而不是FileReader,因为关闭前者最终会关闭两者。
    • 是的!非常感谢!它真的很有帮助。现在文件已从目录中删除。
    【解决方案2】:

    File.delete()File.deleteOnExit() 方法只会删除空目录。在处理文件时,您必须从目录中删除文件(并确保没有子目录)。或者,您可以在处理结束时使用 Apache Commons IO 中的 FileUtils.deleteDirectory()

    【讨论】:

    • 好的。感谢您的回复。
    【解决方案3】:

    双斜线似乎很可疑。使用单个反斜杠,您需要将其引用为\\,或者使用单个斜杠/

    此外,您可以尝试在 then 方法返回时使用 delete() 而不是 deleteOnExit()

    【讨论】:

    • 这应该是评论,而不是答案。
    • 但实际上,文件中的数据正在被很好地加载到数据库中,这意味着目录中的文件已被识别。所以,我想,斜线不是问题
    【解决方案4】:

    根据API

    请求在虚拟机终止时删除此抽象路径名表示的文件或目录。

    但是,在您的代码中,您将该函数视为立即删除目录。

    【讨论】:

      【解决方案5】:

      您不能删除目录,除非它是空的。如果目录不为空,则需要先递归删除目录下的所有文件和子目录。

      因此 directory.deleteOnExit() 在您的情况下不起作用。

      更多,我建议你明确删除文件,而不是使用 deleteOnExit()。如果与文件相关的所有输入/输出流都没有关闭,它是一个不会在退出时删除文件的哑函数。始终关闭流并显式删除文件,然后是目录。

      【讨论】:

        【解决方案6】:

        也许您需要做的是对打开文件的组件使用 dispose() 方法。可能的情况是文件仍然被打开并被打开它的组件锁定,因此您必须确保使用dispose() 方法来解决该问题。

        【讨论】:

          猜你喜欢
          • 2021-03-07
          • 2018-08-22
          • 2013-09-09
          • 1970-01-01
          • 2018-11-08
          • 2012-03-05
          • 1970-01-01
          • 1970-01-01
          • 2016-12-27
          相关资源
          最近更新 更多