У меня есть простой проект, похожий на базу данных, который предназначен для помещения имен пользователей и зашифрованных паролей в HashMap
и, в отдельном HashMap
, ассоциированных имен пользователей и объекта хранения (называемого PasswordData
), который содержит целое числомассив (это используется в качестве ключа библиотекой шифрования) и целое число, которое также используется библиотекой.Это все работает хорошо, но проблема заключается во вторичной функции кода.У меня есть несколько методов, предназначенных для копирования HashMap
s в файлы, которые впоследствии могут быть прочитаны, и информация внутри файлов может быть восстановлена в HashMap
.Однако, пытаясь что-то сделать с переменными внутри PasswordData
, я получаю следующее исключение:
Исключение в потоке "main" java.lang.ClassCastException: java.lang.String не может бытьприведение к webappserver.PasswordData ".
Я обнаружил, что независимо от того, что я пытался сделать с указанными переменными, JVM утверждала, что пыталась привести класс хранения к типу String. Если я пропустила какой-либожизненно важная информация, пожалуйста, сообщите мне, и я постараюсь отредактировать все, что может потребоваться.
Класс хранения:
public class PasswordData{
public int[] key;
public int index;
PasswordData(int[] key, int index){
this.key = key;
this.index = index;
}
public int[] returnKey(){
return key;
}
public int returnIndex(){
return index;
}
}
Метод с ошибками:
public void writeFilePassData(HashMap passData, String fileName) throws IOException {
ArrayList<String> usersArrayList = new ArrayList<>(passData.keySet());
ArrayList<PasswordData> passwordDataArrayList = new ArrayList<> (passData.values());
BufferedWriter save = new BufferedWriter(new FileWriter(fileName));
for(int i =0; i< usersArrayList .size(); i++){
int[] ex = passwordDataArrayList .get(i).returnKey();
save.write(usersArrayList .get(i) + '\n');
save.write(ex.toString());
save.write(passwordDataArrayList .get(i).returnIndex().toString());
}
save.close();
}
Примечание: printStackTrace
помечает первую строку оператора for как местоположение ClassCastException
, но удаление в нем привело только к тому, что второй оператор теперь был изменен на Save.write(passwordDataArrayList.get(i).returnKey().toString());
, возвращая ту же ошибку.