我试图用文本文件(zadania.txt)中的字符串填充我的HashMap。它是一个简单的文本文件,格式如下:
问:问题1 答:问题1的答案 问:问题2 答:回答问题2等......然后我想在控制台上写出来,这里的问题是。它运行,但没有写出任何东西。当我更改源文件时,它可以工作,但我想知道它为什么不能使用该文件(文件正常,没有损坏,写在Pages中并保存为文本文件)。有人可以帮忙吗?这是我的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class testClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("zadania.txt");
try {
Scanner skaner = new Scanner(file);
HashMap<String,String> questions = new HashMap<String,String>();
while(skaner.hasNext()){
String question = skaner.nextLine();
String answer = skaner.nextLine();
questions.put(question, answer);
}
Iterator<String> keySetIterator = questions.keySet().iterator();
while(keySetIterator.hasNext()){
String key = keySetIterator.next();
System.out.println(key + "//** " +questions.get(key));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
如果您使用该文件File file = new File("zadania.txt");
的路径,则需要将文件zadania.txt
放在项目的根文件夹中。
或者您可以创建文件夹resources
将文件放在那里并编辑File file = new File("resources/zadania.txt");
的路径
答案 1 :(得分:0)
您的代码适合我。因此,正如已经提到的Oli Charlesworth,您应该在第一个循环中添加一些输出,以检查是否插入了某些内容。如果不是,您似乎有一个名为zadania.txt
的空文件。
其他一些java程序的其他提示:
关闭skaner
!如果您使用的是Java 7,则可以使用try-with-resources:
try (Scanner skaner = new Scanner(file)){
//...
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
否则使用finally结构:
Scanner skaner = null;
try {
skaner = new Scanner(file)
//...
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(skaner != null) {
skaner.close();
}
}
否则,您可能会冒险(在较大的程序中)用完文件句柄。关闭您打开的任何资源的最佳做法。
班级名称应按照惯例编写,并带有大写字母,因此在您的情况下,它应为TestClass
。
如果迭代两者,则Map的键和值使用Map.entrySet()
方法来获取两者。对于大型地图,这比迭代密钥和调用Map.get()
以获取值更快。
答案 2 :(得分:0)
这是另一个选择,您可以阅读* .txt文件并将其放入HashMap
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class App {
public static void main(String[] args) {
Map<String, String> questions = new HashMap<>();
Scanner scanner = null;
try {
scanner = new Scanner(new FileInputStream(new File("zanader.txt")));
while (scanner.hasNext()) {
String question = scanner.nextLine();
String answer = scanner.nextLine();
questions.put(question, answer);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (scanner != null) {
scanner.close();
}
}
// get an iterator
Iterator<Map.Entry<String, String>> itr = questions.entrySet().iterator();
// and go through it
while (itr.hasNext()) {
// get the entryset from your map
Map.Entry<String, String> value = itr.next();
// return only the key
String question = value.getKey();
System.out.println("Get answer by key: " + questions.get(question));
System.out.println("Question: " + value.getKey() + " - Answer: " + value.getValue());
}
}
}
我评论了有趣的部分。
帕特里克