«ОШИБКИ» являются наиболее полезными для разработчиков, чтобы знать их ошибки и разрешать их, чтобы система работала идеально.
PHP предоставляет некоторые из лучших способов узнать разработчиков, почему и где их кусок кода получает ошибки, поэтому, зная эти ошибки, разработчики могут сделать свой код лучше во многих отношениях.
Лучшие способы записи следующих двух строк в верхней части скрипта для получения всех сообщений об ошибках:
error_reporting(E_ALL);
ini_set("display_errors", 1);
Другой способ использования инструментов отладчика, таких как xdebug в вашей среде IDE.
Есть три случая, когда может быть брошен FileNotFoundException
.
Первые два случая вряд ли основаны на вашем описании. Я проверил бы против третьего случая, используя file.canRead()
.
Если тест выше возвращает true, я бы заподозрил следующее:
Возможно, вы забыли явно бросить или поймать потенциал исключение (т. е. FileNotFoundExcetion
). Если вы работаете в среде IDE, вы должны получить жалобу от компилятора. Но я подозреваю, что вы не запускали свой код в такой среде IDE.
Я только что запустил ваш код, не заботясь о жалобе NetBeans, только чтобы получить следующее сообщение об исключении:
Исключение в потоке "main" java.lang.RuntimeException: Некомпилируемый исходный код - неподтвержденное исключение java.io.FileNotFoundException; должен быть пойман или объявлен брошенным
blockquote>Попробуйте следующий код и посмотрите, не исчезло ли исключение:
public static void main(String[] args) throws FileNotFoundException { File file=new File("scores.dat"); System.out.println(file.exists()); Scanner scan=new Scanner(file); }
Помимо всех других ответов, упомянутых здесь, вы можете сделать одно, что сработало для меня.
Если вы читаете путь через сканер или с помощью командной строки args, вместо копирования, вставляющего путь напрямую из проводника Windows только вручную введите путь.
Это сработало для меня, надеюсь, что это кому-то поможет:)
Сам код работает правильно. Проблема в том, что рабочий путь программы указывает на другое место, чем вы думаете.
Используйте эту строку и посмотрите, где находится путь:
System.out.println(new File(".").getAbsoluteFile());
Очевидно, существует ряд возможных причин, и предыдущие ответы хорошо документируют их, но вот как я решил это в одном конкретном случае:
У меня была эта проблема, и я чуть не разорвал мои волосы, пытаясь понять это. Оказалось, что файл не существует, хотя он выглядел так, как будто это было. Проблема заключалась в том, что Windows 7 была настроена на «Скрыть расширения файлов для известных типов файлов». Это означает, что если файл имеет имя «data.txt», его фактическое имя файла «data.txt.txt».
Надеюсь, что это поможет другим сохранить себя в волосах.
Чтение и запись из файла и в файл могут быть заблокированы вашей ОС в зависимости от атрибутов разрешений файла.
Если вы пытаетесь прочитать из файла, то я рекомендую использовать метод setReadable файла для установки это true, или, например, этот код:
String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file;
File f = new File(arbitrary_path);
f.setReadable(true);
data_of_file = Files.readAllBytes(f);
f.setReadable(false); // do this if you want to prevent un-knowledgeable
//programmers from accessing your file.
Если вы пытаетесь записать в файл, я рекомендую использовать метод setWritable файла, чтобы установить его в true или, например, этот код :
String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file = { (byte) 0x00, (byte) 0xFF, (byte) 0xEE };
File f = new File(arbitrary_path);
f.setWritable(true);
Files.write(f, byte_array);
f.setWritable(false); // do this if you want to prevent un-knowledgeable
//programmers from changing your file (for security.)
Недавно я нашел интересный случай, который создает FileNotFoundExeption, когда файл, очевидно, существует на диске. В моей программе я читаю путь к файлу из другого текстового файла и создаю объект File:
//String path was read from file
System.out.println(path); //file with exactly same visible path exists on disk
File file = new File(path);
System.out.println(file.exists()); //false
System.out.println(file.canRead()); //false
FileInputStream fis = new FileInputStream(file); // FileNotFoundExeption
Причиной истории является то, что в конце пути содержатся невидимые символы\r\n. Исправление:
File file = new File(path.trim());
File.canRead()
бесполезно, когда вам уже нужно поймать исключение и расточительно, когда система должна протестировать его в любом случае во время открытия. – user207421 26 April 2015 в 22:58