Android - 从文件中读取文本并将其添加到LinkedHashMap

时间:2015-03-11 14:36:57

标签: java android file key-value

我正在构建一个获取国家/地区名称并返回其国家/地区代码(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异常。

2 个答案:

答案 0 :(得分:1)

  1. 那是因为FileReader无法找到您的txt文件。
  2. 您可以尝试:

    String[] words = inputLine.split(":"); //split each line by : delimiter
    dictionary.put(words[0],words[1]); //what should be the second arg?
    
  3. 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);