Kwert-soft.ru

IT Софт для ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Скачать java ioexception

java.io.IOException – How to solve Java IOException

Posted by: Bhagvan Kommadi in IOException May 30th, 2014 0 Views

This article talks about java.io.ioexception . This exception is related to Input and Output operations in the Java code. This exception happens when there is a failure during reading, writing and searching file or directory operations. IOException is a checked exception. A checked exception is handled in the java code by the developer. This exception object has a string message which is the root cause for the failure.

IOException has sub classes such as FileNotFoundException , EOFException , UnsupportedEncodingException , SocketException , and SSLException . If the file is not found, FileNotFoundException is thrown. While reading a file, EOFException occurs when end of the file is reached. If the file has an unsupported encoding, UnsupportedEncodingException occurs. When the socket connection is closed, SocketException can happen. SSLException happens when the ssl connection is not established.

IOException Subclasses

1. Prerequisites

Java 7 or 8 is required on the linux, windows or mac operating system.

2. Download

You can download Java 7 from Oracle site. On the other hand, You can use Java 8. Java 8 can be downloaded from the Oracle web site .

3. Setup

You can set the environment variables for JAVA_HOME and PATH. They can be set as shown below:

4. What is Java IOException

java.io.IOException is an exception which programmers use in the code to throw a failure in Input & Output operations. It is a checked exception. The programmer needs to subclass the IOException and should throw the IOException subclass based on the context.

5. UML diagram

The sequence diagram of throwing of the IOException in classes Manager, Service, Facade and Persistence Manager is shown below:

IO Exception Sequence Diagram

6. When is IOException thrown

Java application needs to handle failures related to reading, writing and searching a file or a directory. java.io.IOException is the base exception class used for handling the failures. In a method of a class, try, catch, and finally block handles the exception. The application api class methods throw an IOException or its subclasses.

Try catch finally block of code is shown below in different scenarios. The code below shows printing of the exception stack trace.

Printing Stack trace

In the code below, a runtime exception is thrown after catching the IOException in a java application.

throwing a runtime exception

In the code below, a wrapped exception is thrown after catching IOException in Facade class.

throwing a wrapped exception

In the code below, throwing a business exception after catching the IOException is shown.

Throwing a business exception

Throwing an application exception after catching an IOException is presented in the code below:

Throwing an application exception

6. A simple case of java.io.ioexception

Let’s see a very simple case of a Java IOException . In the following example, we are going to try to read some lines of text from a file that does not exist:

The code above is executed as shown below:

Now, when you run this program, because the file input.txt does not exist, the exception is thrown as shown in the screen below. As you can see the message is showing the cause of the problem. The root cause of the problem is that the file does not exist.

IOException

EOFException is a subclass of the IOException.The code below shows how an EndOfFileException happens while reading an input file. While reading a file, EOFException is thrown when the end of the file is reached.

The code above is executed as shown below:

You can run the above code as per the command above. The output is as shown in the screen below.

EOFException

FileNotFoundException is a subclass of IOException. FileNotFoundException scenario is presented in the code below. This happens if the input file is not found.

The code above is executed as shown below:

The output of the code when executed is shown below.

FileNotFoundException

7. How to solve Java IOException

IOException is a Java exception which occurs when an IO operations fails.Develop can explicitly handle the exception in a try-catch-finally block and print out the root cause of the failure. The developer can take the correct actions to solve this situation by having additional code in the catch and finally blocks.

8. Download the Source Code

That was an example on how to solve the java.io.ioexception .

Last updated on Sept. 30, 2019

Java — Exceptions

An exception (or exceptional event) is a problem that arises during the execution of a program. When an Exception occurs the normal flow of the program is disrupted and the program/Application terminates abnormally, which is not recommended, therefore, these exceptions are to be handled.

An exception can occur for many different reasons. Following are some scenarios where an exception occurs.

A user has entered an invalid data.

A file that needs to be opened cannot be found.

A network connection has been lost in the middle of communications or the JVM has run out of memory.

Some of these exceptions are caused by user error, others by programmer error, and others by physical resources that have failed in some manner.

Based on these, we have three categories of Exceptions. You need to understand them to know how exception handling works in Java.

Checked exceptions − A checked exception is an exception that is checked (notified) by the compiler at compilation-time, these are also called as compile time exceptions. These exceptions cannot simply be ignored, the programmer should take care of (handle) these exceptions.

For example, if you use FileReader class in your program to read data from a file, if the file specified in its constructor doesn’t exist, then a FileNotFoundException occurs, and the compiler prompts the programmer to handle the exception.

Example

If you try to compile the above program, you will get the following exceptions.

Output

Note − Since the methods read() and close() of FileReader class throws IOException, you can observe that the compiler notifies to handle IOException, along with FileNotFoundException.

Unchecked exceptions − An unchecked exception is an exception that occurs at the time of execution. These are also called as Runtime Exceptions. These include programming bugs, such as logic errors or improper use of an API. Runtime exceptions are ignored at the time of compilation.

For example, if you have declared an array of size 5 in your program, and trying to call the 6 th element of the array then an ArrayIndexOutOfBoundsExceptionexception occurs.

Example

If you compile and execute the above program, you will get the following exception.

Читать еще:  Класс reader java

Output

Errors − These are not exceptions at all, but problems that arise beyond the control of the user or the programmer. Errors are typically ignored in your code because you can rarely do anything about an error. For example, if a stack overflow occurs, an error will arise. They are also ignored at the time of compilation.

Exception Hierarchy

All exception classes are subtypes of the java.lang.Exception class. The exception class is a subclass of the Throwable class. Other than the exception class there is another subclass called Error which is derived from the Throwable class.

Errors are abnormal conditions that happen in case of severe failures, these are not handled by the Java programs. Errors are generated to indicate errors generated by the runtime environment. Example: JVM is out of memory. Normally, programs cannot recover from errors.

The Exception class has two main subclasses: IOException class and RuntimeException Class.

Following is a list of most common checked and unchecked Java’s Built-in Exceptions.

Exceptions Methods

Following is the list of important methods available in the Throwable class.

public String getMessage()

Returns a detailed message about the exception that has occurred. This message is initialized in the Throwable constructor.

public Throwable getCause()

Returns the cause of the exception as represented by a Throwable object.

public String toString()

Returns the name of the class concatenated with the result of getMessage().

public void printStackTrace()

Prints the result of toString() along with the stack trace to System.err, the error output stream.

public StackTraceElement [] getStackTrace()

Returns an array containing each element on the stack trace. The element at index 0 represents the top of the call stack, and the last element in the array represents the method at the bottom of the call stack.

public Throwable fillInStackTrace()

Fills the stack trace of this Throwable object with the current stack trace, adding to any previous information in the stack trace.

Catching Exceptions

A method catches an exception using a combination of the try and catch keywords. A try/catch block is placed around the code that might generate an exception. Code within a try/catch block is referred to as protected code, and the syntax for using try/catch looks like the following −

Syntax

The code which is prone to exceptions is placed in the try block. When an exception occurs, that exception occurred is handled by catch block associated with it. Every try block should be immediately followed either by a catch block or finally block.

A catch statement involves declaring the type of exception you are trying to catch. If an exception occurs in protected code, the catch block (or blocks) that follows the try is checked. If the type of exception that occurred is listed in a catch block, the exception is passed to the catch block much as an argument is passed into a method parameter.

Example

The following is an array declared with 2 elements. Then the code tries to access the 3 rd element of the array which throws an exception.

This will produce the following result −

Output

Multiple Catch Blocks

A try block can be followed by multiple catch blocks. The syntax for multiple catch blocks looks like the following −

Syntax

The previous statements demonstrate three catch blocks, but you can have any number of them after a single try. If an exception occurs in the protected code, the exception is thrown to the first catch block in the list. If the data type of the exception thrown matches ExceptionType1, it gets caught there. If not, the exception passes down to the second catch statement. This continues until the exception either is caught or falls through all catches, in which case the current method stops execution and the exception is thrown down to the previous method on the call stack.

Example

Here is code segment showing how to use multiple try/catch statements.

Catching Multiple Type of Exceptions

Since Java 7, you can handle more than one exception using a single catch block, this feature simplifies the code. Here is how you would do it −

The Throws/Throw Keywords

If a method does not handle a checked exception, the method must declare it using the throws keyword. The throws keyword appears at the end of a method’s signature.

You can throw an exception, either a newly instantiated one or an exception that you just caught, by using the throw keyword.

Try to understand the difference between throws and throw keywords, throws is used to postpone the handling of a checked exception and throw is used to invoke an exception explicitly.

The following method declares that it throws a RemoteException −

Example

A method can declare that it throws more than one exception, in which case the exceptions are declared in a list separated by commas. For example, the following method declares that it throws a RemoteException and an InsufficientFundsException −

Example

The Finally Block

The finally block follows a try block or a catch block. A finally block of code always executes, irrespective of occurrence of an Exception.

Using a finally block allows you to run any cleanup-type statements that you want to execute, no matter what happens in the protected code.

A finally block appears at the end of the catch blocks and has the following syntax −

Syntax

Example

This will produce the following result −

Output

Note the following −

A catch clause cannot exist without a try statement.

It is not compulsory to have finally clauses whenever a try/catch block is present.

The try block cannot be present without either catch clause or finally clause.

Any code cannot be present in between the try, catch, finally blocks.

The try-with-resources

Generally, when we use any resources like streams, connections, etc. we have to close them explicitly using finally block. In the following program, we are reading data from a file using FileReader and we are closing it using finally block.

Example

try-with-resources, also referred as automatic resource management, is a new exception handling mechanism that was introduced in Java 7, which automatically closes the resources used within the try catch block.

To use this statement, you simply need to declare the required resources within the parenthesis, and the created resource will be closed automatically at the end of the block. Following is the syntax of try-with-resources statement.

Syntax

Following is the program that reads the data in a file using try-with-resources statement.

Example

Following points are to be kept in mind while working with try-with-resources statement.

To use a class with try-with-resources statement it should implement AutoCloseable interface and the close() method of it gets invoked automatically at runtime.

You can declare more than one class in try-with-resources statement.

While you declare multiple classes in the try block of try-with-resources statement these classes are closed in reverse order.

Except the declaration of resources within the parenthesis everything is the same as normal try/catch block of a try block.

The resource declared in try gets instantiated just before the start of the try-block.

The resource declared at the try block is implicitly declared as final.

User-defined Exceptions

You can create your own exceptions in Java. Keep the following points in mind when writing your own exception classes −

All exceptions must be a child of Throwable.

If you want to write a checked exception that is automatically enforced by the Handle or Declare Rule, you need to extend the Exception class.

If you want to write a runtime exception, you need to extend the RuntimeException class.

We can define our own Exception class as below −

You just need to extend the predefined Exception class to create your own Exception. These are considered to be checked exceptions. The following InsufficientFundsException class is a user-defined exception that extends the Exception class, making it a checked exception. An exception class is like any other class, containing useful fields and methods.

Example

To demonstrate using our user-defined exception, the following CheckingAccount class contains a withdraw() method that throws an InsufficientFundsException.

The following BankDemo program demonstrates invoking the deposit() and withdraw() methods of CheckingAccount.

Compile all the above three files and run BankDemo. This will produce the following result −

Output

Common Exceptions

In Java, it is possible to define two catergories of Exceptions and Errors.

JVM Exceptions − These are exceptions/errors that are exclusively or logically thrown by the JVM. Examples: NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException.

Programmatic Exceptions − These exceptions are thrown explicitly by the application or the API programmers. Examples: IllegalArgumentException, IllegalStateException.

Типы исключений в Java с примерами

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

Встроенные исключения — это исключения, доступные в библиотеках Java. Эти исключения подходят для объяснения определенных ошибок. Ниже приведен список важных встроенных исключений в Java.

  1. ArithmeticException
    Бросается, когда в арифметической операции возникло исключительное условие.
  2. ArrayIndexOutOfBoundsException
    Брошено, чтобы указать, что к массиву обращались с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива.
  3. ClassNotFoundException
    Это исключение возникает, когда мы пытаемся получить доступ к классу, определение которого не найдено
  4. FileNotFoundException
    Это исключение возникает, когда файл недоступен или не открывается.
  5. IOException
    Он выбрасывается, когда операция ввода-вывода завершилась неудачно или прервана
  6. InterruptedException
    Он генерируется, когда поток ожидает, спит или выполняет некоторую обработку, и прерывается.
  7. NoSuchFieldException
    Выдается, когда класс не содержит указанное поле (или переменную)
  8. NoSuchMethodException
    Брошено при доступе к методу, который не найден.
  9. Исключение нулевого указателя
    Это исключение возникает при обращении к элементам нулевого объекта. Null ничего не представляет
  10. NumberFormatException
    Это исключение возникает, когда метод не может преобразовать строку в числовой формат.
  11. RuntimeException
    Это представляет любое исключение, которое происходит во время выполнения.
  12. StringIndexOutOfBoundsException
    Он вызывается методами класса String, чтобы указать, что индекс либо отрицателен, чем размер строки

Примеры встроенных исключений:

    Арифметическое исключение

// Java-программа для демонстрации ArithmeticException

public static void main(String args[])

int a = 30 , b = 0 ;

int c = a/b; // нельзя делить на ноль

System.out.println ( «Result = » + c);

catch (ArithmeticException e) <

System.out.println ( «Can’t divide a number by 0» );

Выход:

Исключение нулевого указателя

// Java-программа для демонстрации NullPointerException

public static void main(String args[])

String a = null ; // нулевое значение

> catch (NullPointerException e) <

Выход:

StringIndexOutOfBound Exception

// Java-программа для демонстрации StringIndexOutOfBoundsException

public static void main(String args[])

String a = «This is like chipping » ; // длина 22

char c = a.charAt( 24 ); // доступ к 25-му элементу

catch (StringIndexOutOfBoundsException e) <

Выход:

FileNotFound Exception

// Java-программа для демонстрации FileNotFoundException

public static void main(String args[]) <

// Следующий файл не существует

FileReader fr = new FileReader(file);

> catch (FileNotFoundException e) <

System.out.println( «File does not exist» );

Выход:

NumberFormat Exception

// Java-программа для демонстрации NumberFormatException

public static void main(String args[])

int num = Integer.parseInt ( «akki» ) ;

> catch (NumberFormatException e) <

System.out.println( «Number format exception» );

Выход:

ArrayIndexOutOfBounds Exception

// Java-программа для демонстрации ArrayIndexOutOfBoundException

public static void main(String args[])

int a[] = new int [ 5 ];

a[ 6 ] = 9 ; // доступ к 7-му элементу в массиве

catch (ArrayIndexOutOfBoundsException e)<

System.out.println ( «Array Index is Out Of Bounds» );

Выход:

Определяемые пользователем исключения

Иногда встроенные исключения в Java не могут описать определенную ситуацию. В таких случаях пользователь также может создавать исключения, которые называются «определяемыми пользователем исключениями».
Следующие шаги выполняются для создания пользовательского исключения.

  • Пользователь должен создать класс исключения как подкласс класса исключения. Поскольку все исключения являются подклассами класса Exception, пользователь должен также сделать свой класс его подклассом. Это сделано как:
  • Мы можем написать конструктор по умолчанию в своем собственном классе исключений.
  • Мы также можем создать параметризованный конструктор со строкой в качестве параметра.
    Мы можем использовать это для хранения сведений об исключениях. Из этого мы можем вызвать конструктор суперкласса (исключение) и отправить туда строку.
  • Чтобы вызвать исключение пользовательского типа, нам нужно создать объект для его класса исключения и выбросить его с помощью предложения throw, как:
  • Следующая программа иллюстрирует, как создать собственный класс исключений MyException.
  • Подробная информация о номерах счетов, именах клиентов и остатках принимается в виде трех массивов.
  • В методе main () детали отображаются с использованием цикла for. В это время выполняется проверка, если на каком-либо счете сумма баланса меньше, чем минимальная сумма баланса, которая будет зачислена на счет.
  • Если это так, то возникает MyException и отображается сообщение «Сумма баланса меньше».

// Java-программа для демонстрации пользовательского исключения

// Эта программа генерирует исключение всякий раз, когда баланс
// сумма ниже 1000 рупий

Полное руководство по обработке исключений в Java

Исключение — ошибка, которая нарушает нормальную работу программы. Java обеспечивает надежный объектно-ориентированный способ обработки исключений. Именно его мы и будем изучать в этом руководстве.

Обработка исключений в Java. Краткий обзор

Исключение может возникнуть в разного рода ситуациях: неправильные входные данные, аппаратный сбой, сбоя сетевого соединения, ошибка при работе с базой данных и т.д. Именно поэтому любой Java программист должен уметь правильно обрабатывать исключения, понимать причины их появления и следовать лучшим практикам работы с исключениями даже в небольших проектах.

Java — объектно-ориентированный язык программирования, поэтому всякий раз, когда происходит ошибка при выполнении инструкции, создается объект-исключение, а затем нормальный ход выполнения программы останавливается и JRE пытается найти кого-то, кто может справиться (обработать) это исключение. Объект-исключение содержит много информации об отладке, а именно номер строки, где произошло исключение, тип исключения и т.д.

Что и как происходит, когда появляется ошибка

Когда в методе происходит исключение, то процесс создания объекта-исключения и передачи его в Runtime Environment называется «бросать исключение».

После создания исключения, Java Runtime Environment пытается найти обработчик исключения.

Обработчик исключения — блок кода, который может обрабатывать объект-исключение.

Логика нахождения обработчика исключений проста — прежде всего начинается поиск в методе, где возникла ошибка, если соответствующий обработчик не найден, то происходит переход к тому методу, который вызывает этот метод и так далее.

У нас есть 3 метода, каждый из которых вызывает друг-друга: А -> В -> С (А вызывает В, а В вызывает С). Если исключение появляется в методе C, то поиск соответствующего обработчика будет происходить в обратном порядке: С -> В -> А (сначала там, где было исключение — в С, если там нет обработчика, то идем в метод В — если тут тоже нет, то идем в А).

Если соответствующий обработчик исключений будет найден, то объект-исключение передаётся обработчику.

Обработать исключение — значит «поймать исключение».

Если обработчик исключений не был найден, то программа завершает работу и печатает информации об исключении.

Обратите внимание, что обработка исключений в Java — это фреймворк, который используется только для обработки ошибок времени выполнения. Ошибки компиляции не обрабатываются рамках обработки исключений.

Основные элементы обработки исключений в Java

Мы используем определенные ключевые слова в для создания блока обработки исключений. Давайте рассмотрим их на примере. Также мы напишем простую программу для обработки исключений.

  • Бросить исключение ( throw ) — ключевое слово, которое используется для того, чтобы бросить исключение во время выполнения. Мы знаем, что Java Runtime начинает поиск обработчика исключений как только оно будет брошено, но часто нам самим нужно генерировать исключение в нашем коде, например, в программе авторизации, если какое-то поле null . Именно для таких случаем и существует возможность бросить исключение.
  • throws — когда мы бросаем исключение в методе и не обрабатываем его, то мы должны использовать ключевое слово throws в сигнатуре метода для того, чтобы пробросить исключение для обработки в другом методе. Вызывающий метод может обработать это исключение или пробросить его еще дальше с помощью throws в сигнатуре метода. Следует отметить, что пробрасывать можно сразу несколько исключений.
  • Блок try-catch используется для обработки исключений в коде. Слово try — это начало блока обработки, catch — конец блока для обработки исключений. Мы можем использовать сразу несколько блоков catch при одном try . catch в качестве параметра принимает тип исключения для обработки.
  • finally — необязательная завершающая конструкция блока try-catch . Как только исключение остановило процесс исполнения программы, в finally мы можем безопасно освободить какие-то открытые ресурсы. Следует отметить, что finally блок выполняется всегда — не смотря на появление исключительной ситуации.

Давайте посмотрим простую программу обработки исключений в Java.

А в консоле эта программа напишет такое:

Обратите внимание, что метод testException() бросает исключение, используя ключевое слово throw , а в сигнатуре метода используется ключевое слово throws , чтобы дать понять вызывающему методу тип исключений, которые может бросить testException() .

Важные моменты в обработке исключений:

  • Нельзя использовать блоки catch или finally без блока try .
  • Блок try также может быть использован только с catch блоком, или только с finally блоком, или с тем и другим блоком.
  • Мы можем использовать несколько блоков catch только с одним try .
  • try-catch блоки могут быть вложенными — этим они очень похожи на if-else конструкции.
  • Мы можем использовать только один, блок finally в одном try-catch .

Иерархия исключений в Java

Java исключения являются иерархическими, а наследование используется для категоризации различных типов исключений. Throwable — родительский класс в иерархии Java исключений. Он имеет два дочерних объекта — Error и Exception . Исключения далее разделены на проверяемые исключения и исключения времени выполнения.

  1. Error — это тип ошибок, которые выходят за рамки вашей программы, их невозможно предвидеть или обработать. Это может быть аппаратный сбой, «поломка» JVM или ошибка памяти. Именно для таких необычных ситуаций есть отдельная иерархия ошибок. Мы должны просто знать, что такие ошибки есть и не можем справиться с такими ситуациями. Примеры Error : OutOfMemoryError и StackOverflowError .
  2. Проверяемые исключения (Checked Exceptions) — тип исключений, которые мы можем предвидеть в программе и попытаться обработать, например, FileNotFoundException . Мы должны поймать это исключение и написать внятное и полезное сообщение пользователю о том, что произошло (также желательно логировать ошибки). Exception — родительский класс всех проверяемых исключений (Checked Exceptions). Если мы бросили проверяемое исключение, то должны поймать его в том же методе или должны пробросить его с помощью ключевого слова throws .
  3. Runtime Exception — это ошибки программиста. Например, пытаясь получить элемент из массива, мы должны проверить длину массива, прежде чем пытаться получить элемент — в противном случае это может быть брошен ArrayIndexOutOfBoundException . RuntimeException — родительский класс для всех Runtime исключений. Если мы сами бросаем Runtime Exception в методе, то не обязательно указывать в сигнатуре метода ключевое слово throws .

На рисунке 1 представлена иерархия исключений в Java:

Рисунок 1 — Иерархия исключений в Java

Полезные методы в обработке исключений

Класс Exception и все его подклассы не содержат какие-либо методы для обработки исключений. Все предоставляемые методы находятся в базовом классе Throwable . Подклассы класса Exception созданы для того, чтобы определять различные виды исключений. Именно поэтому при обработке исключений мы можем легко определить причину и обработать исключение в соответствии с его типом.

Полезные методы класса Throwable :

  1. public String getMessage() — этот метод возвращает сообщение, которое было создано при создании исключения через конструктор.
  2. public String getLocalizedMessage() — метод, который переопределяют подклассы для локализации конкретное сообщение об исключении. В реализации Throwable класса этот метод просто использует метод g etMessage() , чтобы вернуть сообщение об исключении ( Throwable на вершине иерархии — ему нечего локализировать, поэтому он вызывает getMessage()) .
  3. public synchronized Throwable getCause() — этот метод возвращает причину исключения или идентификатор в виде null , если причина неизвестна.
  4. public String toString() — этот метод возвращает информацию о Throwable в формате String .
  5. public void printStackTrace() — этот метод выводит информацию трассировки стека в стандартный поток ошибок, этот метод перегружен и мы можем передать PrintStream или PrintWriter в качестве аргумента, чтобы написать информацию трассировки стека в файл или поток.

Автоматическое управление ресурсами и улучшения блока перехвата ошибок в Java 7

Если вам нужно перехватывать много исключений в одном блоке try-catch , то блок перехвата будет выглядеть очень некрасиво и в основном будет состоять из избыточного кода. Именно поэтому в Java 7 это было значительно улучшено и теперь мы можем перехватывать несколько исключений в одном блоке catch .

Ссылка на основную публикацию
Adblock
detector
Sr.No.Method & Description
1