繁体   English   中英

如何使用Java从目录中删除文件?

[英]How to delete a file from a directory using Java?

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

这是我的代码:

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个文件。 每个文件加载到数据库后,我希望每个文件都从目录中删除。]

提前致谢!

最好在代码中明确。

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();
}

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

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

双重斜杠似乎令人怀疑。 可以使用单个反斜杠(需要将其引为\\\\ ,也可以使用单个反斜杠/

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

根据API

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

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

除非目录为空,否则无法删除。 如果目录不为空,则必须首先以递归方式删除目录中的所有文件和子目录。

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

另外,我建议您显式删除文件,而不要使用deleteOnExit()。 如果没有关闭与文件相关的所有输入/输出流,它是一个笨拙的函数,不会在退出时删除文件。 始终关闭流并显式删除文件,然后删除目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM