powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / если файл для InputStreamReader не найден
9 сообщений из 9, страница 1 из 1
если файл для InputStreamReader не найден
    #38159173
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет

метод класса читает файл по определенному пути, заполняет строками из него ArrayList и возвращает его для дальнейшей работы
наверняка произойдет ситуация, когда в пути к файлу будет ошибка и getResourceAsStream вернет null

как правильно обработать такую ситуацию, чтобы BufferedReader не выдавал эксцепшены, а сам метод все равно возвращал ArrayList?

сделал так =
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  public static ArrayList ipList( String path ){    
    ArrayList<String> arr = new ArrayList<String>();
    InputStream inpstr = Access.class.getResourceAsStream( path );
    if (inpstr != null) {
      BufferedReader buff = new BufferedReader(new InputStreamReader( inpstr ));
      try {
        while ( true ) {
        String line = buff.readLine();
        if (line == null) break; arr.add (line );
        }
      } catch ( IOException e ) {
        e.printStackTrace();
      }
    } else {
      arr.add( "error" );
    }
    return arr;    
  }

то есть если будет ошибка в пути к файлу, то метод все равно вернет не пустой ArrayList

помогите правильно сделать такой метод
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159194
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как он может вернуть не пустой лист - если ошибка в пути? откуда ему взять данные?

В целом это делается так - 1) создается пустой аррайлист, тут у вас все ок. 2) Все что может кинуть исключение обертывается в try catch(у вас не так) 3) ловится исключение - и обычно показывается или логируется ошибка 4) возвращается пустой лист(а откуда в нем данные возьмутся?)
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159232
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, ну я подумал, что если не произойдет ошибка в пути к файлу (if) то arr заполнится как надо, если будет ошибка, то в arr будет единственное значение = error (соответственно метод вернет не пустой ArrayList)

изначально было вот так =
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  public static ArrayList ipList(String path){    
    ArrayList<String> arr = new ArrayList<String>();
    InputStream inpstr = Access.class.getResourceAsStream(path);
    BufferedReader buff = new BufferedReader(new InputStreamReader( inpstr ));
    try {
      while (true) {
      String line = buff.readLine();
      if (line == null) break; arr.add(line);
      }
    } catch (IOException e) {
      e.printStackTrace();
      arr = null;
    }
    return arr;    
  }

и в случае ошибки в пути - вываливались эксцепшены, что приводило к ошибке отработки метода
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159242
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboy,
я думаю, метод должен возвращать тот тип, который указан в объявлении, или выбрасывать эксепшн, а то гадай потом, что там, нулл, минусодин, эррор, или еще что
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159276
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerbuyboy, метод должен возвращать тот тип, который указан в объявлении, или выбрасывать эксепшн получается, что корректнее использовать проверку на уровне другого метода? типа если метод public static ArrayList ipList вернул этот самый ArrayList, то используем его, а если вернул эксцепшн = действуем как-то иначе...
правильно я вас понял?
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159300
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboy, эксепшн, это исключительная ситуация, означающая что выполнение метода завершилось аварийно, и результат его выполнения нельзя интерпретировать. В вашем случае просто вернуть пустой лист нормально, потому что весь остальной код будет знать, что получит лист. При необходимости можно проверить его на заполненность, без нужды знать что внутри этого метода. Если же вы где-то вставите кусок проверки типа if list.contains("error"), то намертво привяжете клиентский код к реализации вашего ipList(). Если вернете нулл, то можете получить нпе при попытке обратиться к методам list-а.
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159313
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerЕсли же вы где-то вставите кусок проверки типа if list.contains("error"), то намертво привяжете клиентский код к реализации вашего ipList(). Если вернете нулл, то можете получить нпе при попытке обратиться к методам list-а.это ценно - про привязку клиентского кода = спасибо!
получается, что исходный вариант кода более правильный? только вместо e.printStackTrace(); надо сделать логирование или вообще убрать, да?

p.s. и что такое нпе вот здесь = ... получить нпе при попытке ...
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159323
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboy,
нпе это NullPointerException
...
Рейтинг: 0 / 0
если файл для InputStreamReader не найден
    #38159336
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerнпе это NullPointerException понял
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / если файл для InputStreamReader не найден
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]