使用java在CSV文件上搜索范围数据

使用java在CSV文件上搜索范围数据,java,csv,Java,Csv,我正在尝试使用java从.csv文件中获取选择性数据 例如: CSV文件包含: Blue, 03/11/2014, 13:00, 10 pink, 04/11/2014, 14:00, 15 Red, 03/11/2014, 15:00, 50 我想用java创建一个程序,允许用户从该文件中选择他们想要的信息 我一直在处理下面的示例,但只能打印字符串,不能打印日期/整数: package csv; import java.io.BufferedReader; import java.io.F

我正在尝试使用java从.csv文件中获取选择性数据

例如:

CSV文件包含:

Blue, 03/11/2014, 13:00, 10
pink, 04/11/2014, 14:00, 15
Red, 03/11/2014, 15:00, 50
我想用java创建一个程序,允许用户从该文件中选择他们想要的信息

我一直在处理下面的示例,但只能打印字符串,不能打印日期/整数:

package csv;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Arrays;
import java.util.Scanner;


public class ReadCVS {
    public static void main(String[] args) {

        ReadCVS obj = new ReadCVS();
        obj.run();

    }

    public void run() {

        String csvFile = "GeoIPCountryWhois.csv";
        BufferedReader br = null;
        String line = "";
        String cvsSplitBy = ",";
        File file = new File("GeoIPCountryWhois.csv");
        Scanner in = null;

        try {

            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {

                // use comma as separator
                String[] colour = line.split(cvsSplitBy);

                //System.out.println(country[0]+ country[1] + country[2]+ country[3]);

                for (int i = 0; i < colour.length; i++) {
                    if (colour[i].equals("Pressure")) {
                        System.out.println(colour[0] + colour[1] + colour[2] + colour[3]); //Matching    the string and printing.
                    }
                }

            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("Done");
    }

}
包csv;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.array;
导入java.util.Scanner;
公共类ReadCVS{
公共静态void main(字符串[]args){
ReadCVS obj=新的ReadCVS();
obj.run();
}
公开募捐{
字符串csvFile=“GeoIPCountryWhois.csv”;
BufferedReader br=null;
字符串行=”;
字符串cvsSplitBy=“,”;
File File=新文件(“geoicountrywhois.csv”);
扫描仪输入=空;
试一试{
br=新的BufferedReader(新的文件读取器(csvFile));
而((line=br.readLine())!=null){
//使用逗号作为分隔符
字符串[]颜色=行分割(cvsSplitBy);
//System.out.println(国家[0]+国家[1]+国家[2]+国家[3]);
对于(int i=0;i
任何帮助/提示将不胜感激


谢谢

我建议使用第三方库解析csv文件。这使您能够专注于您正在尝试做的事情的本质,而不是挂断文件解析。例如,看一看。这将使您的代码如下所示:

Reader in = new FileReader("GeoIPCountryWhois.csv");
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    String colour = record.get(0);
    Date date = df.parse(record.get(1));
    String timeString = record.get(2);
    Integer value = Integer.parseInt(record.get(3));
    // do what you want with the values here.
}
请注意此代码如何在所有列上调用
String.trim()
。这是为了防止在分割行后列周围有额外的空格。例如,
“a,b,c”。拆分(“,”
将导致
字符串
数组
{a”,“b”,“c”}
,该数组在
“b”
“c”
中有额外的空间。这可能是您的bug的来源,您只能在第一列进行过滤


作为第三种选择,这有点过分,您可以使用。这为sql文件提供了一个JDBC接口,您可以通过它执行sql查询。我从未使用过这个图书馆,但它看起来很有趣。鉴于您正在尝试筛选CSV文件。

问题不明确,请进一步解释。
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

while ((line = br.readLine()) != null) {
    // use comma as separator
    String[] columns = line.split(cvsSplitBy);

    // extract the columns.
    String colour = columns[0].trim();
    Date date = df.parse(columns[1].trim());
    String time = columns[2].trim();
    Integer otherValue = Integer.parseInt(columns[3].trim());

    // filter on the colour column.
    if(colour.equals("Red")) {
        System.out.printf("colour = %s, date = %s, time = %s, val = %d\n", colour, df.format(date), time, otherValue);
    }

}