我正在构建一个获取国家/地区名称并返回其国家/地区代码(iso /电话前缀)的函数。我在我的项目(到应用程序的根目录)中添加了一个文本文件,该文件以下列格式保存国家/地区的键值对及其国家/地区代码:
"Abkhazia":7840,
"Abkhazia":7940,
"Afghanistan":93,
"Albania":355,
"Algeria":213,
用户在EditText
框中输入国家/地区名称,该函数应返回代码。
editTextCountryInput = (EditText) findViewById(R.id.editTextCountryInput);
getCountryCode(editTextCountryInput.getText().toString());
功能:
private int getCountryCode(String countryName){
try{
BufferedReader reader = new BufferedReader(new FileReader(new File("countries.txt")));
String inputLine = null;
LinkedHashMap<String,String> dictionary = new LinkedHashMap<String,String>();
try{
while((inputLine = reader.readLine()) !=null){
String[] words = inputLine.split(":"); //split each line by : delimiter
for(String word: words){
Log.i("splitting ", " line");
dictionary.put(word,?); //what should be the second arg?
}
}
}catch (IOException e){
e.printStackTrace();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}
int countryCode =(int) dictionary.get(countryName);
return countryCode;
}
我想读取文本文件的每一行,拆分分隔符所在的每一行(&#34;:&#34;)并将每个拆分键值对放在LinkedHashMap
中。 2个问题:
1.我收到错误java.io.FileNotFoundException: countries.txt: open failed: ENOENT (No such file or directory)
。当我测试absolute path
的文件时,我得到了&#34; /countries.txt" - 但是仍然没有出现错误。
2.在使用String.split(":")
方法拆分读取线之后,我不知道如何以键值方式将两个部分存储在hashMap中。
这是我用来确定绝对路径的代码:
File f = new File("countries2.txt");
Log.i("abs path: ", f.getAbsolutePath());
编辑:
我在Android Studio中创建了一个新的assets
文件夹(右键点击了应用 - >新的资源文件夹 - >完成)并放置了我的countries.txt
文件,但我还是得到了FileNotFound异常。
答案 0 :(得分:1)
您可以尝试:
String[] words = inputLine.split(":"); //split each line by : delimiter
dictionary.put(words[0],words[1]); //what should be the second arg?
words[0]
将保留姓名,而words[1]
将保留号码。
答案 1 :(得分:0)
我认为第一个问题非常简单,告诉你找不到文件,第二个问题是你可以使用数组,例如
String[] a ="this iskey:and its value".split(":");
System.out.println(a[0]);
System.out.println(a[1]);
HashMap<String, String> map = new HashMap<String, String>();
String key =a[0];
String value =a[1];
map.put(key, value);