Почему я ловлю исключение - PullRequest
1 голос
/ 27 декабря 2011

Я запускаю следующий код, чтобы попытаться прочитать текстовый файл.Я довольно новичок в java и практиковался, пытаясь создавать проекты для себя.Следующий код немного изменен по сравнению с тем, что я первоначально нашел, чтобы попытаться прочитать текстовый файл, но по какой-то причине он каждый раз ловит исключениеТекстовый файл, из которого он пытается прочитать, говорит только "привет мир".Я предполагаю, что это не должно быть нахождение текстового файла.Я положил его в ту же папку, что и исходный код, и он появляется в исходных пакетах (я использую NetBeans кстати).Это, вероятно, просто нужно импортировать по-другому, но я не могу найти дополнительную информацию о нем.Если мой код уместен здесь, то он ниже.

package stats.practice;

import java.io.*;
import java.util.Scanner;

public final class TextCompare {

    String NewString;

    public static void main() {
        try {
            BufferedReader in = new BufferedReader(new FileReader("hello.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }
            in.close();
        } catch (IOException e) {
        } 
        System.out.println("Error");
    }
}

Ответы [ 4 ]

7 голосов
/ 27 декабря 2011

Закрывающая скобка в блоке catch не на своем месте. Переместите его так, чтобы он был ниже System.out.println("Error");.

public static void main(String[] args) {
    try {
        BufferedReader in = new BufferedReader(new FileReader("hello.txt"));
        String str;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
        }
        in.close();
    } catch (IOException e) { // <-- from here
        System.out.println("Error");
        // or even better
        e.printStackTrace();
    } // <-- to here
}

В целях защитного программирования (по крайней мере, до Java 7) вы всегда должны закрывать ресурсы в блоке finally:

public static void main(String[] args) {
    BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader("hello.txt"));
        String str;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (Exception e) {}
        }

        // or if you're using Google Guava, it's much cleaner:
        Closeables.closeQuietly(in);
    }
}

Если вы используете Java 7, вы можете воспользоваться преимуществами автоматического управления ресурсами через try -with-resources :

public static void main(String[] args) {
    try (BufferedReader in = new BufferedReader(new FileReader("hello.txt"))) {
        String str;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
3 голосов
/ 27 декабря 2011

Не обязательно ловить исключение каждый раз. Ваш оператор System.out.println("Error"); находится вне блока catch. Поэтому он выполняется каждый раз, когда выполняется программа.

Чтобы исправить это, переместите его в фигурные скобки (catch (IOException e) {System.out.println("Error");})

2 голосов
/ 27 декабря 2011

Первый шаг, замените код ниже

catch (IOException e){}

с

catch ( IOException e) { e.printStackTrace(); }

, а также заменить

main()

с

main(String[] args)

Это скажет вам точную причину. и тогда вы должны решить фактическую причину.

Теперь для Netbeans файл hello.txt должен быть в вашем проекте Netbeans. как

<project_dir>
    |
    -->hello.txt
    -->build
    -->src
1 голос
/ 27 декабря 2011

У вас есть пустой блок catch, который почти всегда является плохой идеей. Попробуйте поставить это там:

... catch (IOException ex) {
  ex.printStackTrace();
}

И вы должны быстро увидеть, что происходит.

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