Java, IO - самый быстрый способ удалить файл - PullRequest
17 голосов
/ 28 июля 2010

Моя проблема в том, что у меня есть приложение, которое пишет много относительно (100-500 КБ) небольших CSV-файлов (десятки и сотни тысяч). Содержимое этих файлов затем загружается в базу данных через вызов sql loader (его oracle db), и это то, с чем мне приходится жить.

Итак, мне нужно время от времени удалять эти небольшие файлы, чтобы они не занимали все пространство. Я хотел бы присоединить это к операции, которая записывает эти файлы и загружает их в базу данных в качестве последнего шага финализации.

Мой вопрос - как в java можно удалить кучу маленьких файлов с меньшими накладными расходами на производительность?

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

Ответы [ 5 ]

13 голосов
/ 28 июля 2010

Ну, file.delete() должно хватить (он внутренне реализован как собственный метод)

4 голосов
/ 28 июля 2010

Я бы предложил проверить библиотеку Apache Commons IO . У них есть несколько довольно полезных методов для удаления файлов в классе FileUtils.

2 голосов
/ 28 июля 2010

Вы можете найти это на порядок быстрее, если вы раскошелитесь и попросите систему удалить их. Вы должны быть в состоянии достичь точки остановки (где никакие файлы не обрабатывались), а затем выложить и удалить «*» или . или что-то еще для вашей ОС.

(Обратите внимание, это делает вашу программу ОЧЕНЬ зависимой!)

Убедитесь, что в Windows и Mac вы не используете функцию корзины!

Приятной особенностью del . или rm * является то, что они ДОЛЖНЫ выполнять пакетную операцию, а не многократно открывать, изменять и закрывать каталог.

Вы также можете написать имена файлов с шаблоном, например, a001, a002, a003, ... и когда вы достигнете a999, вы перейдете на b001 и удалите *.

1 голос
/ 22 июня 2013
FileUtils.cleanDirectory(new File("/usr/share/test")); //linux

FileUtils.cleanDirectory(new File("C:\\test")); //windows
0 голосов
/ 21 мая 2019

Можно использовать java.nio.file.Files метод ниже

delete(Path path)
deleteIfExists(Path path)

Подробнее см. в этой статье

...