@MakarMS

Почему переменные в методе сохраняют своё значение при следующем вызове?

Здравствуйте! Я уже 3 часа бьюсь над этим. Я создаю телеграм бота по продажам. У меня есть метод. При вызове я передаю ему путь к папке с товаром и подпись к товару. После вызова метод смотрит все файлы в этой дириктории, потом берёт первый файл, потом отправляет его человеку и удаляет отправленный файл.

Главная проблема в том, что когда происходит вызов метода второй раз, то переменные сохраняют своё значение с прошлого раза, и не обновляются. Т.е. я взял files[0](первый файл в дириктории), отправил его, удалил. Вызываю его второй раз, и он обратно отправляет мне files[0], хотя должен был выдать уже второй файл до удаления. Как сделать так метод заново сканировал папку на файлы, и по-новой заносил их в массив?

public void sendTov(String patch, String caption){

            ClassLoader classLoaderr = getClass ().getClassLoader ();
           
         File file = new File ( Objects.requireNonNull ( classLoaderr.getResource ( patch ) ).getFile () );

           String[] files = file.list ();
            String path = patch + files[0];
            try {
                sendDocument ( chat_id, caption, path );
                String del = "src/main/resources/" + patch + files[0];
                file = new File ( del );
                if (file.delete ()) {
                    System.out.println ( "succses" );
                } else System.out.println ( "error" );


            } catch (TelegramApiException e) {
                e.printStackTrace ();
            }
        }
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 2
alfss
@alfss
Вы удаляете файлы из ресурсов? Вы точно уверены, что так стоит делать?
Вы проверяли что файл удаляется на самом деле?
Ответ написан
xez
@xez Куратор тега Java
Senior Junior Roo
Тут есть несколько проблем:
1. Всю работу с файлами лучше вынести в отдельный сервис. Метод, который и ищет файл, и его отправляет, и еще и удаляет потом, и еще как-то умеет обрабатывать исключения, явно не отвечает принципу Single Responsibility. "String patch, String caption" лучше тоже обернуть в какой-то объект типа "Товар".
2. Если ваше приложение работает с файлами, пусть лучше эти файлы лежат в каком-то отдельном месте, а не в папке resources. Путь до хранилища файлов лучше указать в properties.
3. Используйте пакет java.nio. На дворе 2020й.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 350 000 до 400 000 ₽
HighTeam Нижний Новгород
от 120 000 до 200 000 ₽
ОТП Банк Москва
от 240 000 до 270 000 ₽