2016-11-05 2 views
2

Я пытаюсь использовать абсолютный путь для чтения файла из файловой системы, но не удалось из-за «FileNotFoundException», который я не знаю, почемуFileNotFoundException при чтении файла, используя абсолютный путь

File file=new File("E:\\Directory\\File.txt"); 
byte[] buff=new byte[8]; 
FileInputStream fileIn=new FileInputStream(file.getAbsolutePath()); 
int n=fileIn.read(buff); 
System.out.println(n); 
+0

Чтобы подтвердить наличие файла, скопируйте полный путь, удалите лишние \ и вставьте его для Windows Explorer. – Jules

ответ

0

Ну, проблема в том, что ошибка:

Файл не существует. т. е. в этом пути нет файла. Имя, которое вы дали конструктору, может быть неправильным. Вы можете проверить, если файл существует через:

File file=new File("E:\\Directory\\File.txt"); 
if(file.exists()){ 

    //do things here 
} 

Вы также можете проверить, существует ли файл из окна проводника (если вы бежите окна на вашем компьютере). Если вы не можете найти файл, это объясняет проблему. Как я уже сказал, ошибка вызывается из-за отсутствия файла с этим путем.

+0

Спасибо за ответ, но я уже проверил, файл существует в этом пути. –

+0

Вы проверили с описанным методом? – ItamarG3

+0

Я проверил API Java. –

0

Вот некоторые из вещей, которые могли бы очевидно вызвать эту проблему:

  1. Файл не существует. (Вы говорите, что это не проблема ...)
  2. Каталог существует, но у вашего приложения нет разрешения на его чтение.
  3. каталога и файл существует, но у вас есть проблемы с истинным путем, либо по имени пути, который вы используете:

    • Это может иметь невидимый/непечатаемые символы в нем.
    • Это, возможно, завершающие символы пробела, или различные числа вложенных пространств
    • Это может быть проблемой омоглиф
  4. Фактическая ошибка происходит где-то в вашем коде.

  5. Как-то код, который вы фактически выполняете, не соответствует вашему исходному коду; например у вас есть методологическая проблема с процедурой редактирования/компиляции/развертывания/запуска.

Могу ли я предложить вам попробовать это так:

File file = new File("E:/Directory/File.txt"); 
FileInputStream fileIn = new FileInputStream(file); 

обращение пути Java должно перевести на «/» для соответствующей платформы разделителя конкретного файла. И file уже обозначает абсолютный путь, поэтому вызов file.getAbsolutePath() не нужен.

+0

не будет '3.' ошибаться, поскольку его путь содержит не те из них? – ItamarG3

+0

Путь в коде, который он показал нам, не имеет ни одного из них, но 1) это может быть не реальный код, и 2) у нас есть только его слово для него, что фактический путь - это то, что он считает. Ему бы посоветовали (действительно) проверить эти вещи. И даже ** перепроверьте ** их. –

+0

Согласен, но я стараюсь делать то, что у нас есть, не допуская больше. – ItamarG3

0

Спасибо за помощь. Я уже знаю почему. Потому что он может вызывать исключения, поэтому я должен добавить исключение для подписи метода или окружения с помощью try/catch. На самом деле, когда вы используете Intelli IDEA, «Alt + Enter» может помочь выяснить, что не так с вашими кодами .....

Смежные вопросы