Программа Java не завершается на основе сравнения строк

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

    // Loop used to repeat try catch block until a file is successfully created/opened
    FileWriter FW = null;       // Create & initialize the FW object outside of the loop 
                                // to ensure availability in the correct scope
    boolean success = false;
    while (success == false) {
        // Try catch block for handling possible exception thrown by the 
        // FileWriter constructor
        try {
            FW = new FileWriter(fileName);
            success = true;
        } 

        // Catch allows the user to attempt to rename file and includes option
        // to exit program immediately (presumably after multiple failed attempts)
        catch (IOException e) {
            String failString = "exit";
            fileName = (String)JOptionPane.showInputDialog(
                    "There was an error creating your file.  Please\n" +
                    "ensure you have permission to write to the directory\n" +
                    "and then re-enter your desired file name.  Please do\n" +
                    "not attempt to specify a directory.  Please do not\n" +
                    "use special characters.  Type 'exit' to end the\n" +
                    "program now.");
            if (fileName != failString) {
                fileName = fileName + ".txt";
            }

            else {
                JOptionPane.showMessageDialog(null, "Exiting...", "EXITING", 1);
                System.exit(0);
            }
        }
    }

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

Любые идеи относительно того, что не так, или предложения по лучшему способу сделать это?


person Troy D    schedule 09.12.2012    source источник
comment
Вы должны использовать filename.equals(failstring) - String являются объектами, поэтому использование == или != не сравнивает их адекватно   -  person Swadq    schedule 09.12.2012


Ответы (1)


Строки сравниваются с использованием equals(), а не != или ==.

Итак, вам нужно

if (!fileName .equals(failstring)) {
  fileName = fileName + ".txt";
} else {
  System.exit(1);
}

Дополнительные сведения см. в руководстве по Java: http://docs.oracle.com/javase/tutorial/java/data/comparestrings.html

Кстати: обычно лучше использовать «положительные» выражения, а не отрицательные (с ними лучше справляется человеческий мозг). Итак, рекомендуется использовать:

if (fileName .equals(failstring)) {
  System.exit(1);
} else {
  fileName = fileName + ".txt";
}

вместо

person a_horse_with_no_name    schedule 09.12.2012
comment
Потрясающий! Это сработало отлично! Спасибо за советы и мастер-класс! - person Troy D; 09.12.2012