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

read dates line by line from text file and store them in a dictionary java

我有一个包含 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 文件并将每个日期存储在字典中,例如哈希图或其他格式。此外,如果日期是 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();
    }

您可以试试下面的功能。

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
}

.... for some reason, it reads only every alternate line from the file so half the dates are missing.

查看您代码中的这两行:

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

第一个将一行文本读入 readLine

第二个将下一行读入 s

您读入 readLine 的备用行从未使用过。


我可以推荐你花时间阅读这篇文章吗: