Сохранение изменений папки на Java ArrayLists
Я пытаюсь это программа, которая следит за изменениями каталога. Программа должна сказать:
- Если файл был удален
- Если файл был изменен
- Если файл новый.
Для этого я использую два ArrayList, в первом ArrayList (initiallist) я сохраняю содержимое FilePath. Затем я делаю паузу. Пользователь может изменить что-то из FilePath, например, вставить новые файлы или удалить другие файлы или изменить. Когда я нажимаю клавишу, я снова сохраняю во втором ArrayList содержимое FilePath.
Тогда я сравниваю предметы и вот проблема. Как я могу это сравнить?
Я использую это:
for(int i=0; i<initiallist.size(); i++){
for(int j=0; j<finallist.size(); j++){
int compname = initiallist.get(i).getName().compareTo(finallist.get(j).getName());
//If name is the same
if(compname==0){
//If modify date and length is the same
if(initiallist.get(i).getLength()==finallist.get(i).getLength() && initiallist.get(i).getDate()==finallist.get(i).getDate()){
System.out.println("The file: "+initiallist.get(i).getName()+ " --> wasn't modified." );
break;
}else{
System.out.println("The file: "+initiallist.get(i).getName()+ " --> was modified." );
}
}else if(compname!=0){
}else{
}
}
}
Мне нужна помощь, чтобы взять новые файлы и удаленные файлы. СПАСИБО!:)
3 ответа
Для сравнения объектов в Java используйте метод.equals() вместо оператора "=="
+ Изменить
initiallist.get(i).getDate()==finallist.get(i).getDate()
в
initiallist.get(i).getDate().equals(finallist.get(i).getDate())
Сравнение == работает только с примитивными типами. Для сравнения объектов, таких как объект Date, необходимо использовать equals() или compareTo().
== сравнивает АДРЕС двух объектов, а не фактические ЗНАЧЕНИЯ объектов.
if(date1.equals(date2))
//do something
ИЛИ ЖЕ
if(date1.compareTo(date2) == 0)
//do something
Если вы используете Java 7, вы также можете использовать встроенную поддержку для мониторинга файловой системы
Мониторинг файловой системы с помощью WatchService
Это избавит вас от лишней работы.