如何搜索文件并将其读入

时间:2013-10-26 18:51:01

标签: java csv

我有一个具有年龄和名称的csv文件。我想在文件中搜索年龄为30岁的所有人,并显示他们的姓名和年龄。我怎么能用Java做到这一点? 我知道我可以把它读成ArrayList,我只是不确定该怎么做。

这是我到目前为止所拥有的:

 public static void gradeRead(String filename)
 {
  try{
    FileReader fr = new FileReader(filename);
    BufferedReader br = new BufferedReader(fr);

  String fileLines;
  String[] parts;


  while(br.ready())
  {
    fileLines = br.readLine();

    parts = fileLines.split(",");

    System.out.println(parts[0] + " " + parts[1];
  }

  br.close();
  } 
  catch(IOException e)
  {
    System.out.println("Couldnt Read file");      }
}

我知道如何将其读入字符串数组,但我不知道如何将其添加到ArrayList然后进行搜索。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为最好有一个Person类并在每一行中实例化它(带有年龄和名称)。以及用于读取文件和搜索的PersonCatalog类:

public class PersonCatalog
{
    private List<Person> persons = new ArrayList<Person>();

    public void readFile(String filePath) throws NumberFormatException, IOException
    {
        BufferedReader reader = new BufferedReader(new FileReader(new File(filePath)));
        String currentLine;
        int index = 0;
        while((currentLine = reader.readLine()) != null)
        {
            String[] pair = currentLine.split(",");
            if(index != 0)
            {
                persons.add(new Person(pair[1].trim(),Integer.valueOf(pair[0].trim())));
            }
            index++;
        }
        reader.close();
    }

    public List<Person> searchByAge(int age)
    {
        List<Person> results = new ArrayList<Person>();
        for(Person p : persons)
        {
            if(p.getAge() == age)
            {
                results.add(p);
            }
        }
        return results;
    }

    public static void main(String[] args) throws IOException
    {
        PersonCatalog personCatalog = new PersonCatalog();
        personCatalog.readFile("G:/test.csv");
        List<Person> persons = personCatalog.searchByAge(30);
        for(Person person : persons)
        {
            System.out.println(person.getName() + " " + person.getAge());
        }
    }
}

public class Person
{
    private String name;
    private Integer age;

    public Person(String name, Integer age)
    {
        this.name = name;
        this.age = age;
    }

    public String getName()
    {
        return name;
    }
    public Integer getAge()
    {
        return age;
    }
}

输入:

age, name
11, sam
15, jack
3, nani
30, david

输出:

david 30

答案 1 :(得分:0)

如果您使用的是 Windows操作系统,我建议您使用Type 1 JDBC驱动程序。因为你只想打印记录。但是,如您所知,此驱动程序不支持网络。如果满足所有这些,那么这是一个解决方案。

import java.sql.*;
class csv1
{
    public static void main(String args[]) throws Exception
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    Connection c=DriverManager.getConnection("jdbc:odbc:google");

    Statement s=c.createStatement();

    ResultSet rs=s.executeQuery("select * from sample.csv where age=20");

        while(rs.next())
        {
        System.out.println(rs.getObject(1)+"  "+rs.getObject(2));
        }

    s.close();
    c.close();
    }
}

google 是dsn名称。

注意: sample.csv 必须存在于执行程序的目录中。如果是另一个目录,请提及完整路径。

示例:C:\\sample1.csv而不是sample1.csv

参考: How to read csv file using JDBC