Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / если файл для InputStreamReader не найден / 9 сообщений из 9, страница 1 из 1
20.02.2013, 15:27:17
    #38159173
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
всем привет

метод класса читает файл по определенному пути, заполняет строками из него 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
20.02.2013, 15:35:09
    #38159194
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
как он может вернуть не пустой лист - если ошибка в пути? откуда ему взять данные?

В целом это делается так - 1) создается пустой аррайлист, тут у вас все ок. 2) Все что может кинуть исключение обертывается в try catch(у вас не так) 3) ловится исключение - и обычно показывается или логируется ошибка 4) возвращается пустой лист(а откуда в нем данные возьмутся?)
...
Рейтинг: 0 / 0
20.02.2013, 15:50:55
    #38159232
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
забыл ник, ну я подумал, что если не произойдет ошибка в пути к файлу (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
20.02.2013, 15:54:58
    #38159242
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
buyboy,
я думаю, метод должен возвращать тот тип, который указан в объявлении, или выбрасывать эксепшн, а то гадай потом, что там, нулл, минусодин, эррор, или еще что
...
Рейтинг: 0 / 0
20.02.2013, 16:04:40
    #38159276
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
javapeckerbuyboy, метод должен возвращать тот тип, который указан в объявлении, или выбрасывать эксепшн получается, что корректнее использовать проверку на уровне другого метода? типа если метод public static ArrayList ipList вернул этот самый ArrayList, то используем его, а если вернул эксцепшн = действуем как-то иначе...
правильно я вас понял?
...
Рейтинг: 0 / 0
20.02.2013, 16:15:32
    #38159300
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
buyboy, эксепшн, это исключительная ситуация, означающая что выполнение метода завершилось аварийно, и результат его выполнения нельзя интерпретировать. В вашем случае просто вернуть пустой лист нормально, потому что весь остальной код будет знать, что получит лист. При необходимости можно проверить его на заполненность, без нужды знать что внутри этого метода. Если же вы где-то вставите кусок проверки типа if list.contains("error"), то намертво привяжете клиентский код к реализации вашего ipList(). Если вернете нулл, то можете получить нпе при попытке обратиться к методам list-а.
...
Рейтинг: 0 / 0
20.02.2013, 16:22:56
    #38159313
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
если файл для InputStreamReader не найден
javapeckerЕсли же вы где-то вставите кусок проверки типа if list.contains("error"), то намертво привяжете клиентский код к реализации вашего ipList(). Если вернете нулл, то можете получить нпе при попытке обратиться к методам list-а.это ценно - про привязку клиентского кода = спасибо!
получается, что исходный вариант кода более правильный? только вместо e.printStackTrace(); надо сделать логирование или вообще убрать, да?

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


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