-4

我有一个包含年龄和名称的 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然后搜索它。我怎样才能做到这一点?

4

2 回答 2

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
于 2013-10-26T20:45:47.413 回答
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

参考: 如何使用 JDBC 读取 csv 文件

于 2014-02-16T08:58:15.570 回答