我正在创建一个ChatBox程序,该程序响应键入我的Java程序的关键字。我有一个存储为HashMap的响应列表,位于外部txt文件中。我想创建一个方法,使我能够添加到HashMap新的关键字(键):响应(值),因此,添加到外部txt文件。
我已经有了key:值插入到这个文本文件中,但是我很难尝试添加新的键:值,格式正确,然后检索它们。
我有一个名为' addtoresponses()'应该从方法中获取字符串参数并将它们插入到hashMap中。然后使用另一个名为' listMap'的类,使用另一种方法将hashMap写入txt文件。
当我运行我的代码时,hashMap会写入外部文本文件,因此它似乎可以工作(它将它写入外部文本文件,因此稍后可以被其他方法使用)。但是,当我再次运行我的程序时,我立即收到一条错误消息,说明这一点;
缺少文件missing-map.txt中的Hello响应(hello是插入的密钥)。
似乎关键:我加入的价值是失去“价值”'我输入我的方法的一部分。我被告知它可能是我的格式,即它应该以下列方式存储;
**key
response all on one line of length
key
another response all on one line
etc.**
但我不知道如何实现这一目标。我很确定它不是将HashMap插入txt文件的方法。我相信我是如何将这些值放入HashMap的,但我并不十分自信。
非常感谢有人可以查看我的代码并尝试查看我出错的地方,以及出现此错误消息的原因以及我如何解决它。
我已在下面发布了代码;
InstructorMode的构造函数>>
public InstructorMode()
{
helper = new FileAssistance();
edits = new HashMap();
}
添加到HashMap的方法(在InstructorMode类中)>>
public void addtoresponse(String key, String value)
{
edits.put(key, value);
helper.listaMap(edits, "missing-map.txt");
}
添加到外部txt文件的方法(名为FileAssistance的类)>>
public void listaMap(HashMap map, String filename)
{
if(map != null) {
try (FileWriter writer = new FileWriter(filename, true)) {
for(String key : map.keySet()) {
String value = map.get(key);
if(value == null) {
System.out.println("Warning: " +
key + " in listaMap.");
value = "Not sure";
}
writer.write(key.trim());
writer.write('\n');
writer.write(value.trim());
writer.write('\n');
}
writer.close();
}
catch(IOException e) {
System.out.println("Issue: " + filename +
" in listaMap");
}
}
else {
System.out.println("Null map passed to listaMap.");
}
}
非常感谢您的帮助!
编辑 - 读取HashMap的代码>>
public HashMap lookatM(String filename)
{
HashMap map = new HashMap<>();
try (BufferedReader reader =
new BufferedReader(new FileReader(filename))) {
String word;
word = reader.readLine();
while(word != null) {
String response = reader.readLine();
if(response != null) {
response = response.trim();
if(response.length() != 0) {
map.put(word, response);
}
else {
System.out.println("Blank response for " +
word + " in file " +
filename);
}
}
else {
System.out.println("Missing response for " +
word + " in file " +
filename);
}
word = reader.readLine();
}
}
catch(IOException e) {
System.out.println("Problem reading file: " + filename +
" in LookatM");
}
return map;
}