понимание Java попробовать / поймать - PullRequest
1 голос
/ 09 августа 2009

Я сейчас пишу приложение для школы - мини-поисковик. При выполнении он индексирует содержимое текстовых файлов, включенных в качестве аргументов. Я не использовал методы try и catch ранее, и нам только что дали этот код для включения в нашу программу:

Scanner inputFile = null;
try {
    inputFile = new Scanner(new File("dog.txt"));
} catch (FileNotFoundException fe) {
    System.out.println("File not found!");
}

Я создал метод, который перебирает аргументы и добавляет новый объект в массив для каждого найденного уникального слова. Проблема в том, что метод catch, кажется, все еще выполняется при каждом запуске приложения, и я не могу понять, почему. Это вывод:

dog.txt индексируется ... Файл не найден!
cat.txt индексируется ... Файл не найден!

Я включил метод ниже. Если кто-то простудится, возможно, укажет, где я иду не так, это было бы здорово.

static void createIndex(String[] args) {
    for(int i = 0; i < args.length; i++) {
        Scanner inputFile = null;
        try {
            System.out.print((args[i]) + " being indexed ... ");
            inputFile = new Scanner(new File(args[i])); 
            while(inputFile.hasNext()) {
                boolean isUnique = true;
                String newWord = inputFile.next().trim().toLowerCase();
                for(int j = 0; j < uniqueWords; j++)
                    if(newWord.equals(wordObjects[j].getWord())) {
                        wordObjects[j].setFile(args[i]);
                        isUnique = false;
                    }

                if(isUnique) {
                    wordObjects[uniqueWords] = new WordIndex(newWord, args[i]);
                    uniqueWords++;
                }
            }

            System.out.print("done");

        } catch(FileNotFoundException fe) {
            System.out.println("File not found!");
        }
    }
}

Ответы [ 3 ]

5 голосов
/ 09 августа 2009

Если вы замените строку:

System.out.println("File not found!");

с этими строками:

System.out.println("File not found! " + fe);
fe.printStackTrace();

в нем должно быть точно указано, что такое исключение (и номер строки, в которой оно произошло).

Следующим шагом является использование полного пути в конструкторе Scanner (например, "/tmp/dog.txt"). Возможно, ваша IDE выполняет ваш код из каталога, который отличается от того, что вы думаете.

Вы можете выяснить, в каком каталоге фактический вы находитесь:

File here = new File (".");
try {
   System.out.println ("Current directory: " + here.getCanonicalPath());
} catch(Exception e) {
    e.printStackTrace();
}
3 голосов
/ 09 августа 2009

Первое, что я хотел бы сделать, это переключиться между этими двумя строками, чтобы вы получили сообщение, только если файл действительно был найден:

        System.out.print((args[i]) + " being indexed ... ");
        inputFile = new Scanner(new File(args[i])); 

По сути, вставьте их так:

        inputFile = new Scanner(new File(args[i])); 
        System.out.print((args[i]) + " being indexed ... ");

Это менее обманчиво, ИМХО.

Кроме того, код выглядит хорошо для меня, но мы упускаем код для Scanner - я только что проверил и, согласно Java-документам (по крайней мере для 1.4.2), конструктор File не выдает FileNotFoundException, поэтому что-то еще должно. Время вывести отладчик и выяснить, где именно выдается исключение, или, по крайней мере, получить трассировку стека, которая показывает вам, где он выдается.

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

0 голосов
/ 09 августа 2009

Убедитесь, что файл находится на правильном пути (если вы используете eclipse, перед выполнением установите путь запуска к каталогу файла.

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

Если вы переместили линию

    System.out.print((args[i]) + " being indexed ... ");

до строки после

    inputFile = new Scanner(new File(args[i])); 

Я почти уверен, что "файл индексируется ..." не будет печататься

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