【发布时间】:2016-03-16 08:45:00
【问题描述】:
我正在创建一个 ChatBox 程序,它响应输入到我的 Java 程序中的关键字。我有一个存储为 HashMap 的响应列表,在外部 txt 文件中。我想创建一个方法,使我能够添加到 HashMap new keysword(key):responses(values) 并因此添加到外部 txt 文件。
我已经在此文本文件中插入了 key: values,但我很难尝试以正确的格式向其中添加新的 keys: values,然后检索它们。
我有一个名为“addtoresponses()”的方法,它应该从方法中获取字符串参数并将它们插入到 hashMap 中。 hashMap 然后将使用另一种方法从另一个名为“listMap”的类中写入 txt 文件。
当我运行我的代码时,hashMap 确实会写入外部文本文件,所以这似乎可以工作(它将它写入外部文本文件,因此稍后可以由另一种方法使用)。但是,当我再次运行我的程序时,我立即收到一条错误消息,指出;
文件missing-map.txt中对Hello的响应缺失(hello是插入的键)。
看来我要添加的 key:value 是丢失了我在方法中输入的任何内容的“价值”部分。我被告知这可能是我的格式,即它应该以下列方式存储;
**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<String, String>();
}
添加到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<String, String> 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<String, String> lookatM(String filename)
{
HashMap<String, String> 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;
}
【问题讨论】:
-
您的问题在哪里?你提到有一个错误信息,它是什么?
-
您能否包含您从文件中填充地图的代码?
-
@Perdomoff ...这是错误消息 - 在文件 missing-map.txt 中缺少对 Hello 的响应
-
@Paddyd - 已在底部编辑和添加
标签: java oop hashmap filewriter bluej