Например, у меня есть этот файл, который должен быть сформирован следующим образом:
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
}
Надеюсь, я ясно дал понять, иначе просто дайте мне знать, и я попытаюсь объяснить это лучше.
как 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
}
Было бы нормально поместить весь код, ответственный за разбор содержимого файла по его собственному методу. Большинство парсеров перемежают чтение из входного потока и просматривают прочитанное. Такой метод должен объявить, что он throws IOException
, потому что части метода, которые считывают из входного потока, могут IOException
. Метод синтаксического анализа будет проще использовать, если ошибки синтаксического анализа также указываются путем IOException
: вызывающий метод может использовать один catch
для обработки всех проблем, если они не интересуются деталями проблем.
Однако вызывающий метод может иметь возможность различать различные проблемы. Вызывающий может захотеть сообщать о различных сообщениях об ошибках для отсутствующего файла и для файла с неправильным форматированием. Чтобы поддержать это, вы можете создать собственное InvalidFormatException
которое extends IOException
и бросает его при возникновении ошибки синтаксического анализа.
Создайте собственное исключение. Для получения дополнительной информации следуйте этому
if()//your condition
/*create custom exeception*/
throw new Exception("My custom exception");
}
Но это однократное исключение.
Вы должны следовать приведенной выше ссылке, чтобы создать новый класс для пользовательского исключения для повторного использования.
Нет требования использовать стандартные, определенные на Java, поскольку вы можете создавать все, что вам нужно.
Хотя это выглядит (отсюда), ближайший в стандартном наборе, вероятно, является DataFormatException
(см. Здесь), предназначенный для файлов ZIP.
Возможно, лучшим совпадением будет ParseException. Если вы хотите использовать один из более целевых стандартных, это будет тот, который я бы хотел использовать (если вы не хотите создавать свои собственные) или наследовать (если вы это делаете).
Но имейте в виду, что вы всегда можете унаследовать от класса Exception верхнего уровня, если вас не слишком беспокоит, где он находится в иерархии.
my.pack.FileFormatException
.