【问题标题】:text file reading first line has key and second line onward value读取第一行的文本文件具有键和第二行向前的值
【发布时间】:2018-05-16 11:51:37
【问题描述】:

****文本文件格式:****

FirstName,lastname,role,startdate,emptype
sreedhar,reddy,Admin,20-2-2018,contract
shekar,kumar,Admin,20-2-2018,contract
RAJ,roy,Admin,20-2-2018,contract
somu,reddy,Admin,20-2-2018,contract
sumanth,reddy,Admin,20-2-2018,contract

问题:

如何读取文本文件以及如何放入Map(Key,vaule);

第一行在地图中有键(例如:名字、姓氏等)

地图中的第二行值(例如:sreedhar,reddy,ect)

地图输出:{Firstname:sreedhar,Lastname:reddy,role:Admin,startdat:2-6-2018}

请任何人提供java代码读取文本文件并放入映射读取有键,值对。

【问题讨论】:

标签: java


【解决方案1】:

您需要为 Map 指定一个不同的密钥,因为它每次都需要一个唯一的:

地图不能包含重复的键;每个键最多可以映射到一个 价值。

所以你很可能在这里需要MapMaps:

读入文件:

File file = new File("\\\\share\\path\\to\\file\\text.txt");

添加到扫描仪:

Scanner input = new Scanner(file);

将第一行作为您的“标题”:

String[] headerArray = input.nextLine().split(",");

创建MapMaps:

Map<String, Map<String, String>> myMap = new HashMap<>();

循环遍历文本文件的其余部分,添加到Map,然后将Map 添加到主Map,以及一个键(我使用过User0, User1...):

int pos = 0;
String user = "User";
while (input.hasNextLine()) {
    Map<String, String> map = new HashMap<>();
    int loop = 0;
    String[] temp = input.nextLine().split(",");
    for (String temp1 : temp) {
        map.put(headerArray[loop], temp1);
        loop++;
    }
    myMap.put(user + " " + pos, map);
    pos++;
}

一旦你把它分解成几个步骤,它会让生活更轻松。

【讨论】:

  • 我想要 Hashmap 输出 {FirstName=Sreedhar,LastName=Reddy 等} {Firstname=Harish,Lastname=kumar}
【解决方案2】:

你可以这样做 -

br = new BufferedReader(new FileReader("file.txt"));
        String line = br.readLine();
        String headerLine = line;
        List<String> headerList = Arrays.asList(headerLine.split(","));
        List<List<String>> valueListList = new ArrayList<List<String>>();

        while (line != null) {
            line = br.readLine();
            String valueLine = line;
            if(valueLine != null) {
                List<String> valueList = Arrays.asList(valueLine.split(","));
                valueListList.add(valueList);
            }
        }

        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for(int i=0; i<headerList.size();i++){
            List<String> tempList = new ArrayList<String>();
            for(int j=0; j<headerList.size();j++){
                tempList.add(valueListList.get(i).get(i));
            }
            map.put(headerList.get(i), tempList);
        }
        System.out.println(map);

输出:

{emptype=[contract, contract, contract, contract, contract], 
startdate=[20-2-2018, 20-2-2018, 20-2-2018, 20-2-2018, 20-2-2018], 
role=[Admin, Admin, Admin, Admin, Admin], 
lastname=[kumar, kumar, kumar, kumar, kumar], 
FirstName=[sreedhar, sreedhar, sreedhar, sreedhar, sreedhar]}

【讨论】:

  • 我想要 Hashmap 输出 {FirstName=Sreedhar,LastName=Reddy 等} {Firstname=Harish,Lastname=kumar}
  • 不幸的是,由于 map 不允许重复键,因此您无法获得上述输出,相反,您可以将所有值放在一个键下,例如 - 键“名字”下的所有名字跨度>
  • 我们可以使用arraylist实现这个结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多