Ajuda em java - como ler um arquivo e retornar uma palavra para adivinhar

Boa noite estou com algumas dificuldades em ler um arquivo em java e retornar uma palavra, em que o utilizador tem de adivinhar essa palavra. O codigo que desenvolvi lê um conjunto de palavras e contem um contador que conta todas as vezes que se carrega na letra, no entanto eu pretendo que o contador conte apenas as letras que nao pertencem à palavra a adivinhar.

[CÓDIGO]
class WordsBank extends JFrame implements ActionListener{

private final static String[] words = { "Adventure", "Hungary", "Pizza", "Madrid", "Flower",
        "Chicken", "Israel", "Romania", "Denmark", "Australia" };

private final Random rand = new Random();

public String getRandomWord() {
    return words[rand.nextInt(words.length)];
}

class ChosenWord {

private String word;
private boolean[] chars_guessed; 

public ChosenWord(String word){
    this.word = word.toLowerCase();
    chars_guessed = new boolean[word.length()];
}

public boolean isEntireWordGuessed() {

    for (boolean b : chars_guessed) {
        if (!b)
            return false;
    }

    return true;
}

public void charGuess(char guess) {
    int index = word.indexOf(guess);
    while (index >= 0) {
        chars_guessed[index] = true; 
        index = word.indexOf(guess, index + 1);
    }
}

@Override
public String toString(){
    StringBuilder formatted_word = new StringBuilder();

    for(int index = 0; index < word.length(); index++) {
        if (chars_guessed[index]) {
            formatted_word.append(word.charAt(index));
        } else {
            formatted_word.append('_');
        }

        formatted_word.append(' ');
    }

    return formatted_word.toString();
}

}

class Game {

private final static String ALL_LETTERS = "abcdefghijklmnopqrstuvwxyz";

private final WordsBank words_bank = new WordsBank();
private final JFrame frame = new JFrame("Guess the Word");
private final JLabel puzzle_word;
private final ArrayList<JButton> letter_buttons = new ArrayList<>();
JButton[] buttons = new JButton[26];

private int number_guesses;
private ChosenWord chosen_word;

Game() {
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    puzzle_word = new JLabel("Puzzle: ");
    panel.add(puzzle_word, BorderLayout.CENTER);
    
    JPanel bottomPanel = new JPanel();
    JButton[] buttons = new JButton[26];
	String[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
			"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
			"W", "X", "Y", "Z" };

	for (int i = 0; i < buttons.length; i++) {
		buttons[i] = new JButton(letters[i]);
		buttons[i].setSize(40, 40);
		buttons[i].setActionCommand(letters[i]);
		//buttons[i].addActionListener(this);

		bottomPanel.add(buttons[i]);
	}

	panel.add(bottomPanel, BorderLayout.SOUTH);

 

    frame.setContentPane(panel);

    reset();
    frame.setVisible(true);
}

private void reset() {
    chosen_word = new ChosenWord(words_bank.getRandomWord());
    number_guesses = 0;

    for(JButton btn : letter_buttons) {
        btn.setEnabled(true);
    }

    update_game_state();
 }




private void guessLetter(ActionEvent evt) {
    char guessed_letter = evt.getActionCommand().charAt(0);
    handleUserLetterGuess(guessed_letter);

    JButton button = (JButton) evt.getSource();
    button.setEnabled(false);

    if (chosen_word.isEntireWordGuessed()) {
        for (JButton btn : letter_buttons) {
            btn.setEnabled(false);
        }
    }
}

private void handleUserLetterGuess(char guessed_char){

    number_guesses++;
    chosen_word.charGuess(guessed_char);
    update_game_state();
}

private void update_game_state() {
    puzzle_word.setText("Puzzle: " + chosen_word + ", guesses: "+ number_guesses);      
}

}