Какое исключение выбрасывать, если файл неправильно отформатирован / пуст

1

Например, у меня есть этот файл, который должен быть сформирован следующим образом:

PersonName
2,5,6,7,8,9

Первая строка имеет только имя, а со второй строки - все ее значения, разделенные запятыми. Завершение в новой строке. По какой-то причине я не могу создать новую пустую строку в формате кода.

Теперь скажем, что эти значения, разделенные запятыми, будут скопированы в ArrayList а затем я проверю, является ли ArrayList пустым или нет. Если он пуст, я должен исключить исключение. Мой вопрос: какое исключение для этого?

Что-то вроде (в псевдокоде):

FileReader fr = new FileReader(f);
BufferedReader buffReader = new BufferedReader(fr);

ArrayList list = new ArrayList();

while(interator.hasCSV) {
// copy values to list
    Object obj = interator.next();
    list.add(obj);
}

if(list.isEmpty()) {
   // What exception to throw here?
   // It means there was a name in the file (first line) but then no csv values 
}

Надеюсь, я ясно дал понять, иначе просто дайте мне знать, и я попытаюсь объяснить это лучше.

  • 0
    Обратитесь к этому stackoverflow.com/questions/8423700/…
  • 0
    Вероятно, создайте свой собственный класс Exception, например my.pack.FileFormatException .
Теги:
exception

4 ответа

2
Лучший ответ

как paxdiablo сказал, что вы можете создать свое собственное исключение, вот пример ссылки

class CheckListException extends Exception
{
      //Parameterless Constructor
      public CheckListException() {}

      //Constructor that accepts a message
      public CheckListException(List list)
      {
         super(list);
      }
 }

использовать исключение

 try
 {
    if(list.isEmpty()) {
         // What exception to throw here?
         // It means there was a name in the file (first line) but then no csv values 
          throw new CheckListException();
    }
 }
 catch(CheckListException ex)
 {
      //Process message however you would like
 }
  • 0
    Хороший снова. +1 От меня :-)
1

Было бы нормально поместить весь код, ответственный за разбор содержимого файла по его собственному методу. Большинство парсеров перемежают чтение из входного потока и просматривают прочитанное. Такой метод должен объявить, что он throws IOException, потому что части метода, которые считывают из входного потока, могут IOException. Метод синтаксического анализа будет проще использовать, если ошибки синтаксического анализа также указываются путем IOException: вызывающий метод может использовать один catch для обработки всех проблем, если они не интересуются деталями проблем.

Однако вызывающий метод может иметь возможность различать различные проблемы. Вызывающий может захотеть сообщать о различных сообщениях об ошибках для отсутствующего файла и для файла с неправильным форматированием. Чтобы поддержать это, вы можете создать собственное InvalidFormatException которое extends IOException и бросает его при возникновении ошибки синтаксического анализа.

1

Создайте собственное исключение. Для получения дополнительной информации следуйте этому

if()//your condition
  /*create custom exeception*/
  throw new Exception("My custom exception");
}

Но это однократное исключение.

Вы должны следовать приведенной выше ссылке, чтобы создать новый класс для пользовательского исключения для повторного использования.

1

Нет требования использовать стандартные, определенные на Java, поскольку вы можете создавать все, что вам нужно.

Хотя это выглядит (отсюда), ближайший в стандартном наборе, вероятно, является DataFormatException (см. Здесь), предназначенный для файлов ZIP.

Возможно, лучшим совпадением будет ParseException. Если вы хотите использовать один из более целевых стандартных, это будет тот, который я бы хотел использовать (если вы не хотите создавать свои собственные) или наследовать (если вы это делаете).

Но имейте в виду, что вы всегда можете унаследовать от класса Exception верхнего уровня, если вас не слишком беспокоит, где он находится в иерархии.

  • 0
    Спасибо, что потратили время на поиск стандартного исключения :) +1 дано

Ещё вопросы

Сообщество Overcoder
Наверх
Меню