Почему моя программа перехватывает/выдает исключение FileNotFoundException, когда файл существует?

Новичок в Java здесь!

Я пишу программу для практики чтения ввода и записи вывода в файлы. Я закончил кодировать программу, но когда я ее запускаю, программа просто перехватывает и продолжает работу с FileNotFoundException.

Файл находится в исходной папке программы, и я даже пытался поместить его в каждую папку, связанную с программой. Я пробовал:

  • Объявление исключений в заголовке метода
  • Окружение рассматриваемого раздела блоком try/catch.
  • Оба вышеперечисленных вместе.

Вот соответствующий код, который вызывает проблемы. Есть ли что-то, что торчит, чего мне не хватает?

public static void main(String[] args) throws FileNotFoundException  {

    Scanner keyboard = new Scanner(System.in);

    String playerHighestScore = "", playerLowestScore = "";
    int numPlayers = 0, scoreHighest = 0, scoreLowest = 0;

    System.out.println("Enter an input file name: ");               
            String inputFileName = keyboard.nextLine();                 

    String outputFileName = getOutputFileName(keyboard, inputFileName);     
    File inputFile = new File(inputFileName);
    try {
        Scanner reader = new Scanner(inputFile);
        reader.close();
    }
    catch (FileNotFoundException exception) {       
        System.out.println("There was a problem reading from the file.");                   
        System.exit(0);
    }

    Scanner reader = new Scanner(inputFile);
    PrintWriter writer = new PrintWriter(outputFileName);

person Bryan Strobehn    schedule 20.04.2013    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. Кстати, выполните некоторую отладку в этом методе по строкам File f = new File("."); System.out.println(f.getCanonicalPath()); и проверьте, указывает ли он на то, что вы ожидаете.   -  person Andrew Thompson    schedule 20.04.2013
comment
Я почти уверен, что это как-то связано с путем. На какой ОС это работает, и экранируете ли вы косую черту (обратная косая черта для Windows, в противном случае — прямая косая черта)? (Например, C:\Some Directory\file.txt неверен. Это должно быть C\\:Some Directory\\file.txt)   -  person Don    schedule 20.04.2013
comment
Кроме того, поскольку вы только начинаете, я бы рекомендовал использовать фиксированный объект String для вашей тестовой программы вместо того, чтобы вводить его вручную (например, String file = "C:\\Some Directory\\file.txt"; было бы намного проще обнаружить ошибку, чем то, что вы вводите в консоль. Пути достаточно легко испортить, а когда вы каждый раз набираете его вручную, это делает его еще проще. Но это только мое мнение. Я не хочу отговаривать вас от экспериментов, потому что это как ты учишься.   -  person Don    schedule 20.04.2013


Ответы (1)


Ответ прост. Если вы получаете FilENotFoundException, очевидно, причина в том, что файл не найден по указанному пути.
Если вы используете IDE, путь к рабочему каталогу отличается от исходного каталога.
Например, если вы используя NetBeans, ваши исходные файлы находятся внутри /src. Но ваш рабочий каталог (.) — это каталог проекта.
С другой стороны, проблема может заключаться в том, о чем упоминал @Don. Если вы собираетесь использовать кроссплатформенный подход, вы можете использовать «/» в путях. Он работает независимо от ОС.
Пример : String fileName = "C:/Directory/File.txt";
Эти пути чувствительны к регистру. Поэтому убедитесь, что вы используете правильный регистр. (Это не будет проблемой в Windows, пока вы не упакуете программу.)

person Praneeth Peiris    schedule 20.04.2013