Как удалить файл из каталога с помощью Java? - PullRequest
0 голосов
/ 13 апреля 2011

Может кто-нибудь сказать, пожалуйста, как удалить файл в каталоге после его открытия и загрузки в базу данных?

Вот мой код:

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 файла в каталоге. После того, как каждый файл загружен в базу данных, я хочу, чтобы все файлы были удалены из каталога.]

Заранее спасибо!

Ответы [ 6 ]

4 голосов
/ 13 апреля 2011

Лучше быть явным в вашем коде.

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();
}
1 голос
/ 13 апреля 2011

Методы File.delete() и File.deleteOnExit() удаляют каталог, только если он пустой.Вам придется удалять файлы из каталога по мере их обработки (и убедиться, что нет подкаталогов).В качестве альтернативы вы можете использовать FileUtils.deleteDirectory() из Apache Commons IO в конце вашей обработки.

0 голосов
/ 11 августа 2013

Возможно, вам нужно использовать метод dispose () для компонента, который открывает файл. Возможна ситуация, когда файл все еще рассматривается как открытый и заблокированный компонентом, в котором он был открыт, поэтому вы должны убедиться, что для решения этой проблемы вы используете метод dispose().

0 голосов
/ 13 апреля 2011

Вы не можете удалить каталог, если он не пустой. Если каталог не пустой, необходимо сначала рекурсивно удалить все файлы и подкаталоги в каталоге.

Так что directory.deleteOnExit () не будет работать в вашем случае.

Более того, я предлагаю вам явно удалить файлы, не используя deleteOnExit (). Это глупая функция, которая не удаляет файл при выходе, если все входные / выходные потоки, связанные с файлом, не закрыты . Всегда закрывайте потоки и явно удаляйте файлы, а затем каталог.

0 голосов
/ 13 апреля 2011

Согласно API :

Запрашивает удаление файла или каталога, обозначенного этим абстрактным путем, при завершении работы виртуальной машины.

Однако в вашем коде вы рассматриваете эту функцию так, как если бы она немедленно удаляла каталог.

0 голосов
/ 13 апреля 2011

Двойная косая черта кажется подозрительной.Либо используйте одну обратную косую черту, которую нужно заключить в кавычки как \\, либо используйте одну косую черту /.

Также вы можете попробовать использовать delete(), когда метод возвращает вместо deleteOnExit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...