将文件读入Map <integer,arraylist <double =“”>&gt;

时间:2015-06-30 14:07:10

标签: java

我看到了一些类似的问题,但我的情况有点不同。

我定义了一个

Map<Integer, ArrayList<Double>> fl;

我的输入.txt文件:

1 0.56 0.57 0.73 ..

2 2.3 3.50 ......

9 4.98 0.99 ..

如何将文件读入地图fl?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用Scanner并首先调用Scanner.readInt(),它将为您提供第一个整数。

然后调用Scanner.readLine(),它将为行中的所有剩余双精度字符串提供。拆分它并将所有内容解析为双倍。

重复相同的操作直到文件结束。

答案 1 :(得分:1)

这是一个尝试。 我编译并运行了代码。

如果您使用IDE,请确保输入文件与项目位于同一目录中.--这仅适用于您未修改以下路径的情况。

package fileread;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;


public class FileRead {

   private static HashMap<Integer, ArrayList<Double>> map = new HashMap<>();
   private static BufferedReader reader;

   public static void main(String[] args) {
      try
      {
          reader = new BufferedReader(new FileReader("input"));
          //or reader = new BufferedReader(new FileReader("C:\\full-path-to-your-file));
          String line;
          while((line = reader.readLine()) != null)
         {
            String[] tokens = line.split(" ");
            Integer i;
            Double d;
            ArrayList<Double> list = new ArrayList<>();
            i = Integer.valueOf(tokens[0]);

            for(int j = 1; j < tokens.length; j++)
                list.add(Double.valueOf(tokens[j]));
            map.put(i, list);
        }
    }catch(IOException ex)
    {
        //break execution
    }finally
    {
        if(reader != null)
            try 
            {
                reader.close();
            }catch (IOException ex) {
                //don't break :)
            }
    }

    for(Integer i : map.keySet())
    {
        ArrayList<Double> l = map.get(i);
        System.out.print("Line " + i + ": ");
        for(Double d: l)
            System.out.print(d + " ");
        System.out.println();
    }

   }    
 }

答案 2 :(得分:1)

解析文件和填充地图的代码应如下所示

            try {
                BufferedReader bReader = new BufferedReader(new FileReader(new File("c:/input .txt")));
                String line = "";
                Map<Integer, ArrayList<Double>> fl = new HashMap<Integer, ArrayList<Double>>();

                while ((line = bReader.readLine()) != null) {
                    String[] strArray = line.split(" ");
                    for (int i=0;i<strArray.length;i++) {
                        ArrayList<Double> value = new ArrayList<Double>();
                        int key=0;
                        if(i==0){
                             key =Integer.valueOf(strArray[0]);
                        }
                        else{
                            value.add(Double.valueOf(strArray[i]));
                        }
                        fl.put(key, value);
                    }
                }

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }