Почему переменные в методе сохраняют своё значение при следующем вызове?
Здравствуйте! Я уже 3 часа бьюсь над этим. Я создаю телеграм бота по продажам. У меня есть метод. При вызове я передаю ему путь к папке с товаром и подпись к товару. После вызова метод смотрит все файлы в этой дириктории, потом берёт первый файл, потом отправляет его человеку и удаляет отправленный файл.
Главная проблема в том, что когда происходит вызов метода второй раз, то переменные сохраняют своё значение с прошлого раза, и не обновляются. Т.е. я взял files[0](первый файл в дириктории), отправил его, удалил. Вызываю его второй раз, и он обратно отправляет мне files[0], хотя должен был выдать уже второй файл до удаления. Как сделать так метод заново сканировал папку на файлы, и по-новой заносил их в массив?
MakarMS, ну ок. Если вы передаете "путь к папке с товаром", почему тогда, когда доходит дело до удаления файла, вы хардкодите путь "src/main/resources/" ?
Тут есть несколько проблем:
1. Всю работу с файлами лучше вынести в отдельный сервис. Метод, который и ищет файл, и его отправляет, и еще и удаляет потом, и еще как-то умеет обрабатывать исключения, явно не отвечает принципу Single Responsibility. "String patch, String caption" лучше тоже обернуть в какой-то объект типа "Товар".
2. Если ваше приложение работает с файлами, пусть лучше эти файлы лежат в каком-то отдельном месте, а не в папке resources. Путь до хранилища файлов лучше указать в properties.
3. Используйте пакет java.nio. На дворе 2020й.
String del = "src/main/resources/" + patch + files[0];
file = new File ( del );
Это один и тот-же файл, или все таки разные? Если один и тот-же, зачем его искать второй раз?
3. По спецификации, тут не гарантирован порядок файлов: String[] files = file.list ();
т.е. files[0], мало того что может приводить к NPE, еще и может выводить случайные результаты.
There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.