Измените программу нот на метры для чтения, напишите в файл. Входной файл с именем «foot.txt» и выходной файл «meter.txt» [дубликат]

«ОШИБКИ» являются наиболее полезными для разработчиков, чтобы знать их ошибки и разрешать их, чтобы система работала идеально.

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

Лучшие способы записи следующих двух строк в верхней части скрипта для получения всех сообщений об ошибках:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Другой способ использования инструментов отладчика, таких как xdebug в вашей среде IDE.

25
задан Terry Li 11 October 2013 в 17:41
поделиться

7 ответов

Есть три случая, когда может быть брошен FileNotFoundException.

  1. Именованный файл не существует.
  2. Именованный файл на самом деле является каталогом.
  3. По какой-либо причине названный файл не может быть открыт для чтения.

Первые два случая вряд ли основаны на вашем описании. Я проверил бы против третьего случая, используя file.canRead().

Если тест выше возвращает true, я бы заподозрил следующее:

Возможно, вы забыли явно бросить или поймать потенциал исключение (т. е. FileNotFoundExcetion). Если вы работаете в среде IDE, вы должны получить жалобу от компилятора. Но я подозреваю, что вы не запускали свой код в такой среде IDE.

Я только что запустил ваш код, не заботясь о жалобе NetBeans, только чтобы получить следующее сообщение об исключении:

Исключение в потоке "main" java.lang.RuntimeException: Некомпилируемый исходный код - неподтвержденное исключение java.io.FileNotFoundException; должен быть пойман или объявлен брошенным

Попробуйте следующий код и посмотрите, не исчезло ли исключение:

public static void main(String[] args) throws FileNotFoundException {    
    File file=new File("scores.dat");
    System.out.println(file.exists());
    Scanner scan=new Scanner(file);
}
33
ответ дан Terry Li 22 August 2018 в 00:43
поделиться
  • 1
    Да. Спасибо большое – scrblnrd3 11 October 2013 в 16:12
  • 2
    Ваш третий случай включает в себя два других, а также включает в себя ряд других легко разделяемых случаев, таких как проблемы с разрешением, сбои сети и т. Д., Что не очень полезно, и не делает каких-либо аргументов в пользу того, три случая ». Тестирование File.canRead() бесполезно, когда вам уже нужно поймать исключение и расточительно, когда система должна протестировать его в любом случае во время открытия. – user207421 26 April 2015 в 22:58
  • 3
    & quot; Если тест выше возвращает истинное значение & quot; - а что, если это возвращает false? :) – Line 21 February 2018 в 20:12

Помимо всех других ответов, упомянутых здесь, вы можете сделать одно, что сработало для меня.

Если вы читаете путь через сканер или с помощью командной строки args, вместо копирования, вставляющего путь напрямую из проводника Windows только вручную введите путь.

Это сработало для меня, надеюсь, что это кому-то поможет:)

1
ответ дан Alok 22 August 2018 в 00:43
поделиться

Сам код работает правильно. Проблема в том, что рабочий путь программы указывает на другое место, чем вы думаете.

Используйте эту строку и посмотрите, где находится путь:

System.out.println(new File(".").getAbsoluteFile());
31
ответ дан libik 22 August 2018 в 00:43
поделиться
  • 1
    Это не должно быть, это ответ со всем решением, которое необходимо для решения проблемы авторов. – libik 11 October 2013 в 00:07
  • 2
    +1 Я не согласен @josh, я думаю, что это хороший ответ. Это то, что я бы разместил – Bohemian♦ 11 October 2013 в 00:09
  • 3
    @chrylis Я думаю, что OP ошибается. Я думаю, что ОП ошибается в отношении того, что текущий путь – Bohemian♦ 11 October 2013 в 00:28
  • 4
    @JoshM Я не «предполагаю» это, я завершаю это из представленных доказательств. Дальнейшие доказательства могут изменить вывод. – user207421 11 October 2013 в 00:45
  • 5
    @helloworld - дай нам БОЛЬШЕ КОДА! Mabye теперь не попадает на эту строку, а на другую, или, может быть, вы вызываете неправильный метод ... Просто дайте нам часть кода, где ваши & quot; file.exists возвращают true и все еще бросают исключение & quot; – libik 11 October 2013 в 02:44

Очевидно, существует ряд возможных причин, и предыдущие ответы хорошо документируют их, но вот как я решил это в одном конкретном случае:

У меня была эта проблема, и я чуть не разорвал мои волосы, пытаясь понять это. Оказалось, что файл не существует, хотя он выглядел так, как будто это было. Проблема заключалась в том, что Windows 7 была настроена на «Скрыть расширения файлов для известных типов файлов». Это означает, что если файл имеет имя «data.txt», его фактическое имя файла «data.txt.txt».

Надеюсь, что это поможет другим сохранить себя в волосах.

9
ответ дан petehern 22 August 2018 в 00:43
поделиться
  • 1
    Спасибо за информацию. Я была такая же проблема. – sriram 22 February 2016 в 21:50
  • 2
    Тот же вопрос. Когда ничего не имеет смысла, люди должны проверить это решение. – AFP_555 11 May 2017 в 06:25

Чтение и запись из файла и в файл могут быть заблокированы вашей ОС в зависимости от атрибутов разрешений файла.

Если вы пытаетесь прочитать из файла, то я рекомендую использовать метод 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.)
2
ответ дан Solumyr 22 August 2018 в 00:43
поделиться

Недавно я нашел интересный случай, который создает 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()); 
3
ответ дан yurin 22 August 2018 в 00:43
поделиться
0
ответ дан Irina Larisa 4 November 2018 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: