2013-08-30 2 views
0

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

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

File file = new File(FilePath + s); //path is c:\\abc folder & s is file name fgty.dat file   
if (file.exists()) { 
    file.delete(); 
} 
file.createNewFile(); 

Просьба сообщить

+2

Что такое 'FilePath'? «Строка» или «Файл»? Кстати, имена переменных начинаются с буквы нижнего регистра в Java. –

+0

@ C.Champagne это строка, да, изменится и, пожалуйста, сообщите, как это достичь. –

+0

Предлагаю сначала начать использовать Google и попытаться найти решение ваших проблем с программированием, а не просить здесь о полном решении. SO - это сайт Q & A, но сначала вы должны попробовать это самостоятельно, прежде чем задавать вопросы. В Интернете есть много ресурсов, чтобы начать работу с основными материалами (как создавать/удалять файлы, как создавать zip-архивы и т. Д.), И большинство примеров, найденных с помощью Google, достаточно подробны, чтобы ответить на большинство ваших вопросов. – Laf

ответ

1

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

File newFile = new File(FilePath + s); 
for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it. 
    f.delete(); 
} 
newFile.createNewFile(); 

Обратите внимание, что это не будет работать, если ваша папка содержит другие непустые каталоги; вам понадобится более надежное решение. Но вышеприведенный код по крайней мере удалит все файлы в папке (явно запрет исключения) перед созданием нового файла.

Если, как вы упомянули в комментариях, вы хотите удалить только файлы *.dat, это так же просто, как поставить чек, прежде чем удалять что-либо.

for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it. 
    if (f.getName().endsWith(".dat")) { // Only delete .dat files 
     f.delete(); 
    } 
} 
+0

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

+0

filepath с строкой, отображающей ошибку с исправлением –

+0

Должен 'FilePath.list()' быть 'newFile.list() '? И если я прочитал вопрос соответствия, это должно быть «File newFile = new File (FilePath)», поскольку FilePath - это каталог (база в комментарии в коде OP). –

1

На вашем месте я бы переместить каталог на другое имя, скажем abc.OLD, воссоздать его, а затем создать файл. Если все пойдет хорошо, в конце вы можете удалить каталог ols.

Если разные экземпляры вашей программы могут работать одновременно, вам необходимо реализовать некоторую форму синхронизации. Довольно простой подход может состоять в том, чтобы проверить, существует ли каталог abc.OLD и прекратить выполнение, если это произойдет.

+0

не могли бы вы также опубликовать код, который поможет понять, спасибо заранее –

+0

, даже если я хочу, чтобы файл предыдущего дня был заархивирован, а затем переместился, пожалуйста, сообщите –

0
File file = new File(FilePath+"test.txt"); 
File folder = new File(FilePath); 
File[] listOfFiles = folder.listFiles(); 

for(int i = 0; i < listOfFiles.length; i++) { 
    if (listOfFiles[i].isFile()) { 
     System.out.println("File " + listOfFiles[i].getName()); 
     listOfFiles[i].delete(); 
    } 
} 
    try { 
     file.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
    } 
+0

, не могли бы вы также объяснить, что происходит в приведенном выше коде вкратце, заблаговременно, –

+0

Вы указываете папку, в которой ваши файлы создаются в FilePath. Затем он принимает все файлы и папки внутри него. Он выполняет итерацию и проверяет, является ли это файлом. Если это файл, он удаляется. Наконец, он создает новый файл. – Ragavan

0

Сначала я думаю, что вы можете иметь проблемы с тем, как вы своим File создания экземпляра объекта, потому что если вы не имеете разделителя пути (\), вы будете пытаться создать c:\abcfgty.dat вместо c:\abc\fgty.dat.

Используйте вместо этого:

File file = new File(filePath, s); 

Затем вы можете удалить файлы, оканчивающиеся на ".dat". Как я понял, вам не нужно удалять вспомогательные каталоги. (Here ссылка, которая говорит вам, как это сделать. Смотрите также here)

for (File f : filePath.list()) { // For each file in the directory, delete it. 
    if(f.isFile() && file.getName().toLowerCase().endsWith(".dat");){ 
     f.delete(); 
    } 
} 
try { 
    file.createNewFile(); 
} catch (IOException ex) { 
    //Please do something here, at leat ex.printStackTrace() 
} 

Обратите внимание, что мы можем использовать FileFilter для выбора файлов для удаления.

EDIT

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

+0

@C Шампанское, где f инициализировано, пожалуйста, объясните Спасибо заранее –

+0

@SoniSahai Я думаю, вам нужно немного изучить Java, прежде чем продолжать. 'FilePath.list()' возвращает массив 'File', который представляет файлы и складывающиеся файлы в вашей папке« filePath ». f является просто элементом этого массива. –

+0

@SoniSahai Пожалуйста, просмотрите расширенный цикл для https://blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with –

Смежные вопросы