从文本文件中逐行读取日期并将它们存储在字典java中

时间:2017-12-16 06:19:05

标签: java file-handling

我有一个ID号和日期的文本文件,格式为:

ID  Date
1   14/03/2011
2   06/03/2013
3   25/02/2013
4   28/01/2013
5   13/07/2011
6   13/03/2011
7   01/10/2012
8   09/10/2012

我需要读取这个txt文件,并将每个日期存储在字典中,如hashmap或格式的东西。此外,如果日期是DATE数据类型而不是字符串,则更可取。 我试图自己做,但我是JAVA的初学者,我无法完成它。 在此先感谢您的任何帮助

这是我迄今为止所尝试过的。我没有使用字典,我试图将日期放在ArrayList中,出于某种原因,它只读取文件中的每个备用行,因此缺少一半的日期。

static Date[] list = new Date[59400];

public static void main(String[] args) {
    try {
        File file = new File("dates.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        String readLine = "";

        int i =0;
        while ((readLine = bufferedReader.readLine()) != null) {
            String s = bufferedReader.readLine();
            Date date = new SimpleDateFormat("dd/MM/yyyy").parse(s);
            System.out.println(s+","+i);
            i++;
        }
        fileReader.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:1)

  

....出于某种原因,它只读取文件中的每个备用行,因此缺少一半的日期。

从代码中查看以下两行:

    while ((readLine = bufferedReader.readLine()) != null) {
        String s = bufferedReader.readLine();

首先将一行文本读入readLine

第二行将下一行读入s

您从未使用过readLine中的备用行。

我是否可以建议您花时间阅读本文:

答案 1 :(得分:0)

您可以尝试以下功能。

public static void parseFile() throws IOException, ParseException {
    BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("inputFileName.txt")));
    Map<Integer, Date> integerDateMap = new HashMap<>(); // Map to put data
    SimpleDateFormat sdfmt2= new SimpleDateFormat("dd/MM/yyyy"); // date format
    String line = null;
    line = bufferedReader.readLine(); // neglect first line
    while((line = bufferedReader.readLine())!= null){
         String[] split = line.split("   ");
         integerDateMap.put(Integer.parseInt(split[0]),sdfmt2.parse(split[1]));
    }
    System.out.println(integerDateMap); // print to check
}