I’m trying to compare user input name to the exists names in the file javaFx if it the same name will get alert if not another window will appear. but I always get new window even if the name exists any suggestion?
void submitBu(ActionEvent event) throws FileNotFoundException { File file=new File("/Users/AL/info.txt"); String name=nameTextField.getText(); Scanner n =new Scanner(file); //show alert if info already exists in file while(n.hasNextLine()) { String s=n.nextLine(); if(s.equalsIgnoreCase(name)) { displayMessage("Unsuccessfull login. Try again.", AlertType.ERROR); break; } Pane root; try { root = FXMLLoader.load(getClass().getResource("/view/CreditCard.fxml")); Stage stage=new Stage(); stage.setScene(new Scene(root, 600, 400)); stage.setTitle("CrediCard"); stage.show(); } catch (IOException e) { e.printStackTrace(); } break; } }
Advertisement
Answer
You want to display an alert if the same is already present in the info.txt file. Otherwise, you want to open another window. The way your method has been written, it does not do that. There are too many logical flaws in your code.
Here is the while loop that you have used. I have added comments to make each task more clear to understand.
// if there are more names in the file while(n.hasNextLine()) { // retrieve a name String s = n.nextLine(); // check is the inputted name matches with the retrieved name if(s.equalsIgnoreCase(name)) { // if it does, show error dialog and exit displayMessage("Unsuccessfull login. Try again.", AlertType.ERROR); break; } // if it does not, create a new window Pane root; try { root = FXMLLoader.load(getClass().getResource("/view/CreditCard.fxml")); Stage stage=new Stage(); stage.setScene(new Scene(root, 600, 400)); stage.setTitle("CrediCard"); stage.show(); } catch (IOException e) { e.printStackTrace(); } // exit after one iteration break; }
The last break statement is the problem. What is happening here is, you check if the first name in the file matches the input name. If it does, show alert, else show new window. Your method will not check any other name in the file with the input name. It’s easy to figure out why that happens.
If you want to check all the names in the file against the input name and then, if none of the name matches the input name then do what you stated. Here is the way that will work.
void submitButton(ActionEvent actionEvent) { File infoFile = new File("path/to/file"); Scanner scanner = new Scanner(System.in); String inputName = nameTextField.getText(); while (scanner.hasNextLine()) { String fileName = scanner.nextLine(); if (inputName.equalsIgnoreCase(fileName)) { // show alert return; } } // you will only reach here if none of the file name matches the input name // show new window }