Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文本文件读取日期类型_Java_Date_Arraylist - Fatal编程技术网

Java 从文本文件读取日期类型

Java 从文本文件读取日期类型,java,date,arraylist,Java,Date,Arraylist,我有一个文本文件,看起来像这样 2017-06-14 7932 2017-06-15 10092 2017-06-16 7626 2017-06-17 7613 2017-06-18 11072 2017-06-19 8286 2017-06-20 9293 我正在尝试将值存储在ArrayList中 我的代码: import java.util.ArrayList; import java.util.Date; import java.util.List; import java

我有一个文本文件,看起来像这样

2017-06-14  7932
2017-06-15  10092
2017-06-16  7626
2017-06-17  7613
2017-06-18  11072
2017-06-19  8286
2017-06-20  9293
我正在尝试将值存储在
ArrayList

我的代码:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.*;
import java.util.Scanner;

public class Sample2 {

    public static void main(String[] args) throws FileNotFoundException {

        List<Date> l1 = new ArrayList<Date>();
        List<Integer> l2 = new ArrayList<Integer>();

        Scanner s = new Scanner(new FileReader("t1.txt"));

        while (s.hasNext()) {
         l1.add(s.nextInt());      !!!!-----Error Line-----!!!!!!!!
         l2.add(s.nextInt());
        }


        s.close();

        System.out.println(l1);
        System.out.println(l2);;
    }
}
import java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
导入java.io.*;
导入java.util.Scanner;
公共类样本2{
公共静态void main(字符串[]args)引发FileNotFoundException{
列表l1=新的ArrayList();
列表l2=新的ArrayList();
Scanner s=新的扫描仪(新的文件读取器(“t1.txt”);
而(s.hasNext()){
l1.添加(s.nextInt());!!------错误行------!!!!!!!!
l2.加入(s.nextInt());
}
s、 close();
系统输出打印LN(l1);
系统输出打印Ln(l2);;
}
}
我得到以下错误:

线程“main”java.lang中出现异常。错误:未解决的编译问题: 类型列表中的add(int,Date)方法不可用 适用于参数(int) 位于Sample2.main(Sample2.java:17)


如何修复它?

您可以尝试使用以下代码吗

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class Sample2 {
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

public static void main(String[] args) throws FileNotFoundException {

    List<Date> l1 = new ArrayList<Date>();
    List<Integer> l2 = new ArrayList<Integer>();

    Scanner s = new Scanner(new FileReader("t1.txt"));

    while (s.hasNext()) {
        l1.add(getDate(s.next()));
        l2.add(s.nextInt());
    }

    s.close();
    System.out.println(l1);
    System.out.println(l2);
}

private static Date getDate(String next) {
    Date date = null;
    try {
        date = dateFormat.parse(next);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}
import java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
导入java.util.Scanner;
公共类样本2{
私有静态SimpleDataFormat dateFormat=新SimpleDataFormat(“yyyy-MM-dd”);
公共静态void main(字符串[]args)引发FileNotFoundException{
列表l1=新的ArrayList();
列表l2=新的ArrayList();
Scanner s=新的扫描仪(新的文件读取器(“t1.txt”);
而(s.hasNext()){
l1.添加(getDate(s.next());
l2.加入(s.nextInt());
}
s、 close();
系统输出打印LN(l1);
系统输出打印LN(l2);
}
私有静态日期getDate(字符串下一步){
日期=空;
试一试{
date=dateFormat.parse(下一步);
}捕获(解析异常){
e、 printStackTrace();
}
返回日期;
}

}

您需要使用
nextInt()方法检查
int

“else”
s.next()
将返回一个
字符串

这将修复您的错误:

while (s.hasNext()) {
   if (s.hasNextInt()) {
       int myInt = s.nextInt();
       System.out.println(myInt);
   } else {
       String dateAsString = s.next();
       System.out.println(dateAsString);
   }
}
当我运行此代码时,我得到:

2017-06-14
7932
2017-06-15
10092
2017-06-16
7626
2017-06-17
7613
2017-06-18
11072
2017-06-19
8286
2017-06-20
9293
您必须将日期字符串转换为
localDate()
date()
两个建议:

  • 创建一个小类来保存日期和属于一起的
    int
    。为什么?看乔恩·斯基特的
  • 跳过过时的
    Date
    类,改用现代的
    LocalDate
    。它模拟了一个没有时间的日期,这正是您在这里需要的。它还可以直接解析您的日期,而不需要显式格式,因此对于您的特定用途来说非常方便
  • 下面我将代码集中在一个类中,您可能需要一个包含更多类的设计。我将把这个留给你

    public class Sample2 {
    
        private LocalDate date;
        private int value2;
    
        public Sample2(LocalDate date, int value2) {
            this.date = date;
            this.value2 = value2;
        }
    
        @Override
        public String toString() {
            return "\nSample2 [date=" + date + ", value2=" + value2 + "]";
        }
    
        public static void main(String[] args) throws FileNotFoundException {
    
            List<Sample2> l = new ArrayList<>();
    
            Scanner s = new Scanner(new FileReader("t1.txt"));
    
            while (s.hasNext()) {
                l.add(new Sample2(LocalDate.parse(s.next()), s.nextInt()));
            }
    
            s.close();
    
            System.out.println(l);
        }
    }
    

    我还将留给您添加getter(您可能不需要setter)和查找更好的变量名。你知道数字的含义。

    你试图在日期列表中插入一个int。旁白,如果你使用Java 8,你应该使用
    列表而不是
    列表
    ,你知道如何将输入转换为日期吗?这可能是一个更好的重复:更好的格式和一句解释就好了,但你的想法是对的。为什么会有一个未格式化的尾随支架?@Ramachandra Reddy,谢谢。但该列表以“Wed Jun 14 00:00:00 EDT 2017”格式存储,而不是yyyy-MM-DD。是。日期将仅以该格式存储。如果要保留“yyyy-MM-DD”格式,则必须将列表l1声明为列表,而不是List@Chid这是我们努力的结果。实际上,将日期解析成用于保存日期的内容是一个好主意,请不要教年轻人长期过时的类
    Date
    SimpleDateFormat
    和朋友。今天我们有了更好的版本:我推荐现代Java日期和时间API,称为
    Java.time
    或JSR-310。先从这个开始。然后使用
    LocalDate
    。它的
    parse
    方法甚至在没有任何显式格式化程序的情况下解析文件中的日期。
    [
    Sample2 [date=2017-06-14, value2=7932], 
    Sample2 [date=2017-06-15, value2=10092], 
    Sample2 [date=2017-06-16, value2=7626], 
    Sample2 [date=2017-06-17, value2=7613], 
    Sample2 [date=2017-06-18, value2=11072], 
    Sample2 [date=2017-06-19, value2=8286], 
    Sample2 [date=2017-06-20, value2=9293]]