Java io filenotfoundexception что делать
Перейти к содержимому

Java io filenotfoundexception что делать

  • автор:

How to Fix the FileNotFoundException in Java.io

How to Fix the FileNotFoundException in Java.io

The java.io.FileNotFoundException is a checked exception in Java that occurs when an attempt to open a file denoted by a specified pathname fails. This exception is thrown by the FileInputStream , FileOutputStream , and RandomAccessFile constructors when a file with the specified pathname either does not exist or is inaccessible.

Since FileNotFoundException is a checked exception, it must be explicitly handled in methods which can throw this exception — either by using a try-catch block or by throwing it using the throws clause.

What Causes FileNotFoundException

There are two main scenarios when the FileNotFoundException occurs:

  • If a file with the specified pathname does not exist.
  • If a file with the specified pathname is inaccessible, for example, if the file is read-only and is attempted to be opened for writing.

FileNotFoundException Example

Here's an example of a FileNotFoundException thrown when trying to access a file that does not exist in the system:

In the above example, a file with the name myfile.txt is attempted to be accessed. However, since no such file exists in the system, a FileNotFoundException is thrown:

How to Fix FileNotFoundException

Since FileNotFoundException is a checked exception, a try-catch block should be used to handle it. The try block should contain the lines of code that can throw the exception and the catch block should catch and handle the exception appropriately.

Some ways to fix the exception are:

  • If the message of the exception indicates that no such file or directory exists, the file pathname should be checked again to ensure it is correct and if the file exists at the specified location.
  • If the message indicates that access is denied, the permissions of the file should be verified and whether the file is in use by another program.
  • If the message indicates that the specified file is a directory, the name of the file should be changed or the existing directory should be deleted if not in use.

Track, Analyze and Manage Errors With Rollbar

Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Java errors easier than ever. Sign Up Today!

Исключения в Java: перехват и обработка

Исключения: перехват и обработка - 2

Для работы с исключениями в Java существуют специальные блоки кода: try , catch и finally . Код, в котором программист ожидает возникновения исключений, помещается в блок try . Это не значит, что исключение в этом месте обязательно произойдет. Это значит, что оно может там произойти, и программист в курсе этого. Тип ошибки, который ты ожидаешь получить, помещается в блок catch (“перехват”). Сюда же помещается весь код, который нужно выполнить, если исключение произойдет. Вот пример: Вывод: Мы поместили наш код в два блока. В первом блоке мы ожидаем, что может произойти ошибка “Файл не найден”. Это блок try . Во втором — указываем программе что делать, если произошла ошибка. Причем ошибка конкретного вида — FileNotFoundException . Если мы передадим в скобки блока catch другой класс исключения, оно не будет перехвачено. Вывод: Код в блоке catch не отработал, потому что мы “настроили” этот блок на перехват ArithmeticException , а код в блоке try выбросил другой тип — FileNotFoundException . Для FileNotFoundException мы не написали сценарий, поэтому программа вывела в консоль ту информацию, которая выводится по умолчанию для FileNotFoundException . Здесь тебе нужно обратить внимание на 3 вещи. Первое. Как только в какой-то строчке кода в блоке try возникнет исключение, код после нее уже не будет выполнен. Выполнение программы сразу “перепрыгнет” в блок catch . Например: Вывод: В блоке try во второй строчке мы попытались разделить число на 0, в результате чего возникло исключение ArithmeticException . После этого строки 6-10 блока try выполнены уже не будут. Как мы и говорили, программа сразу начала выполнять блок catch . Второе. Блоков catch может быть несколько. Если код в блоке try может выбросить не один, а несколько видов исключений, для каждого из них можно написать свой блок catch . В этом примере мы написали два блока catch . Если в блоке try произойдет FileNotFoundException , будет выполнен первый блок catch . Если произойдет ArithmeticException , выполнится второй. Блоков catch ты можешь написать хоть 50. Но, конечно, лучше не писать код, который может выбросить 50 разных видов ошибок 🙂 Третье. Откуда тебе знать, какие исключения может выбросить твой код? Ну, про некоторые ты, конечно, можешь догадываться, но держать все в голове невозможно. Поэтому компилятор Java знает о самых распространенных исключениях и знает, в каких ситуациях они могут возникнуть. Например, если ты написал код и компилятор знает, что при его работе могут возникнуть 2 вида исключений, твой код не скомпилируется, пока ты их не обработаешь. Примеры этого мы увидим ниже. Теперь что касается обработки исключений. Существует 2 способа их обработки. С первым мы уже познакомились — метод может обработать исключение самостоятельно в блоке catch() . Есть и второй вариант — метод может выбросить исключение вверх по стеку вызовов. Что это значит? Например, у нас в классе есть метод — все тот же printFirstString() , который считывает файл и выводит в консоль его первую строку: На текущий момент наш код не компилируется, потому что в нем есть необработанные исключения. В строке 1 ты указываешь путь к файлу. Компилятор знает, что такой код легко может привести к FileNotFoundException . В строке 3 ты считываешь текст из файла. В этом процессе легко может возникнуть IOException — ошибка при вводе-выводе данных (Input-Output). Сейчас компилятор говорит тебе: “Чувак, я не одобрю этот код и не скомпилирую его, пока ты не скажешь мне, что я должен делать в случае, если произойдет одно из этих исключений. А они точно могут произойти, исходя из того кода, который ты написал!”. Деваться некуда, нужно обрабатывать оба! Первый вариант обработки нам уже знаком: надо поместить наш код в блок try , и добавить два блока catch : Но это не единственный вариант. Мы можем не писать сценарий для ошибки внутри метода, и просто пробросить исключение наверх. Это делается с помощью ключевого слова throws , которое пишется в объявлении метода: После слова throws мы через запятую перечисляем все виды исключений, которые этот метод может выбросить при работе. Зачем это делается? Теперь, если кто-то в программе захочет вызвать метод printFirstString() , он должен будет сам реализовать обработку исключений. К примеру, в другой части программы кто-то из твоих коллег написал метод, внутри которого вызывает твой метод printFirstString() : Ошибка, код не компилируется! В методе printFirstString() мы не написали сценарий обработки ошибок. Поэтому задача ложится на плечи тех, кто будет этот метод использовать. То есть перед методом yourColleagueMethod() теперь стоят те же 2 варианта: он должен или обработать оба исключения, которые ему “прилетели”, с помощью try-catch , или пробросить их дальше. Во втором случае обработка ляжет на плечи следующего по стэку метода — того, который будет вызывать yourColleagueMethod() . Вот поэтому такой механизм называется “пробрасыванием исключения наверх”, или “передачей наверх”. alt=»Исключения: перехват и обработка — 3″ width=»1024″ />Когда ты пробрасываешь исключения наверх с помощью throws , код компилируется. Компилятор в этот момент как бы говорит: “Окей, ладно. Твой код содержит кучу потенциальных исключений, но я, так и быть, его скомпилирую. Мы еще вернемся к этому разговору!” И когда ты где-то в программе вызываешь метод, который не обработал свои исключения, компилятор выполняет свое обещание и снова напоминает о них. В завершении мы поговорим о блоке finally (простите за каламбур). Это последняя часть триумвирата обработки исключений try-catch-finally . Его особенность в том, что он выполняется при любом сценарии работы программы. В этом примере код внутри блока finally выполняется в обоих случаях. Если код в блоке try выполнится целиком и не выбросит исключения, в конце сработает блок finally . Если код внутри try прервется, и программа перепрыгнет в блок catch , после того, как отработает код внутри catch , все равно будет выбран блок finally . Зачем он нужен? Его главное назначение — выполнить обязательную часть кода; ту часть, которая должна быть выполнена независимо от обстоятельств. Например, в нем часто освобождают какие-то используемые программой ресурсы. В нашем коде мы открываем поток для чтения информации из файла и передаем его в объект BufferedReader . Наш reader нужно закрыть и освободить ресурсы. Это нужно сделать в любом случае: неважно, отработает программа как надо или вызовет исключение. Это удобно делать в блоке finally : Теперь мы точно уверены, что позаботились о занятых ресурсах независимо от того, что произойдет при работе программы 🙂 Это еще не все, что тебе нужно знать об исключениях. Обработка ошибок — очень важная тема в программировании: ей посвящена не одна статья. На следующем занятии мы узнаем, какие бывают виды исключений и как создать свое собственное исключение:) До встречи!

java.io.FileNotFoundException – How to solve File Not Found Exception (with video)

In this tutorial, we will discuss how to solve the java.io.FileNotFoundException – FileNotFoundException in Java. This exception is thrown during a failed attempt to open the file denoted by a specified pathname.

Also, this exception can be thrown when an application tries to open a file for writing, but the file is read-only, or the permissions of the file do not allow the file to be read by any application.

You can also check this tutorial in the following video:

java.io.FileNotFoundException – Video

This exception extends the IOException class, which is the general class of exceptions produced by failed or interrupted I/O operations. Also, it implements the Serializable interface and finally, the FileNotFoundException exists since the first version of Java (1.0).

Исключение FileNotFoundException на Java

При использовании Java классов FileInputStream, FileOutputStream и RandomAccessFile нам необходимо передать путь к файлу их конструкторам. В случае, если файл по указанному пути не существует, возникает исключение FileNotFoundException.

Пример

Вывод

Средняя оценка 5 / 5. Количество голосов: 1

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *