如何读取包含两列的文本文件并插入到树形图中?

时间:2015-03-07 07:12:25

标签: java

我们的想法是拥有一个包含以下信息的文本文件:

  

FF0001红色

     

FF0002蓝色

     

FF0003黄色

...

提取此信息并将其存储到树形图中。 到目前为止,这是我的代码......

    public static void main(String[] args) {
    File file = new File("test.txt");
    TreeMap<String, String> colors = new TreeMap<String, String>();
           BufferedReader br = null;

    try {
        FileReader fr = new FileReader(file);
        br = new BufferedReader(fr);

        String line;
        String line1;
        while ((line = br.readLine()) != null) {
            String[] splited = line.split(" ");
            for (String part : splited) {
                colors.put(part, part);
            }
        }
        Set<Map.Entry<String, String>> set = colors.entrySet();
        for (Map.Entry<String, String> col : set) {
            System.out.println(col.getKey() + " " + col.getValue());
        }

    } catch (FileNotFoundException e) {
        System.out.println("File does not extist: " + file.toString());

    } catch (IOException e) {
        System.out.println("Unable to read file: " + file.toString());

    } finally {
        try {
            br.close();
        } catch (IOException e) {
            System.out.println("Unable to close file: " + file.toString());
        } catch (NullPointerException ex) {
            // File was never properly opened
        }
    }

我的输出是:

  

FF0001 FF0001

     

FF0002 FF0002

     

FF0003 FF0003

     

红色红色

     

蓝色蓝色

     

黄色黄色

我是java集合的新手,我需要排序的信息,这就是我选择树形图的原因,但我似乎无法弄清楚为什么它将所有信息存储到密钥和值中。

谢谢,这是第一次发布海报。

3 个答案:

答案 0 :(得分:4)

当您使用空格分割线条时,它会生成两个值,例如:比如“FF0001 Red”

它会有

 splitted [0] = "FF0001" //id
 splitted [1] = "Red" //color

并且您正试图将其存储为:

for (String part : splited) { 
      colors.put(part, part);//see you are storing same key and value so in above it case like key and value entry "FF0001" and another one for color.
}

相反,你需要这样的东西:

String id = splited[0];
String color = splited[1];
colors.put(id, color);

答案 1 :(得分:0)

你的代码有错误

colors.put(part, part);

所以你在地图中的键和值是相同的。 你可以写一些想法:

        String[] splited = line.split("\\s+");
        colors.put(splited[0], splited[1]);

阅读关于分割空间的答案: How do I split a string with any whitespace chars as delimiters?

答案 2 :(得分:0)

您需要删除此for循环,

       for (String part : splited) {
            colors.put(part, part);
        }

而是直接使用数组索引作为键和值。

  colors.put(splited[0], splited[1]);