Получите FileNotFoundException при инициализации FileInputStream с объектом File - PullRequest
6 голосов
/ 16 июня 2009

Я пытаюсь инициализировать объект FileInputStream, используя объект File. Я получаю сообщение об ошибке FileNotFound на линии

fis = new FileInputStream(file);

Это странно, поскольку я открывал этот файл одним и тем же способом, чтобы много раз выполнять регулярные выражения.

Мой метод следующий:

private BufferedInputStream fileToBIS(File file){

    FileInputStream fis = null;
    BufferedInputStream bis =null; 
    try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    return bis;
}

java.io.FileNotFoundException: C: \ dev \ server \ tomcat6 \ webapps \ sample-site (доступ запрещен)
at java.io.FileInputStream.open (собственный метод)
at java.io.FileInputStream. (Неизвестный источник)
at java.io.FileInputStream. (Неизвестный источник)
at controller.ScanEditRegions.fileToBIS (ScanEditRegions.java:52)
at controller.ScanEditRegions.tidyHTML (ScanEditRegions.java:38)
at controller.ScanEditRegions.process (ScanEditRegions.java:64)
at controller.ScanEditRegions.visitAllDirsAndFiles (ScanEditRegions.java:148)
at controller.Manager.main (Manager.java:10)

Ответы [ 4 ]

9 голосов
/ 16 июня 2009

Судя по трассировке стека, которую вы вставили в свой пост, я думаю, что у вас нет прав на чтение файла.

Класс File позволяет выполнять полезные проверки файла, некоторые из них:

boolean canExecute();
boolean canRead();
boolean canWrite();
boolean exists();
boolean isFile();
boolean isDirectory();

Например, вы можете проверить наличие: exist () && isFile () && canRead () и распечатать лучшее сообщение об ошибке в зависимости от причины, по которой вы не можете прочитать файл.

3 голосов
/ 16 июня 2009

Вы можете убедиться, что (в порядке вероятности):

  1. Файл существует.
  2. Файл не является каталогом.
  3. У вас или у процесса Java есть разрешения на открытие файла.
  4. Другой процесс не имеет блокировки файла (вероятно, поскольку вы, вероятно, получите стандартное IOException вместо FileNotFoundException)
3 голосов
/ 16 июня 2009

Это связано с настройками прав доступа к файлам в ОС. Вы запустили процесс Java как пользователь, у которого нет прав доступа к определенному каталогу.

0 голосов
/ 24 марта 2012

Я думаю, что вы выполняете оператор из eclipse или любой Java IDE, и целевой файл также присутствует в рабочей области IDE. Вы получаете сообщение об ошибке, поскольку Eclipse не может прочитать целевой файл в той же рабочей области. Вы можете запустить свой код из командной строки. Не должно быть никаких исключений.

...