【问题标题】:How to search through a file and read it in如何搜索文件并读入
【发布时间】:2013-10-26 18:51:01
【问题描述】:

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

【问题讨论】:

  • 想发布您的作品吗?
  • 首先尝试用谷歌搜索它,尝试编写代码,然后在这篇文章中添加一些代码。
  • 我更新了它。没想到你会认为我没有尝试过

标签: java csv


【解决方案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

【讨论】:

    【解决方案2】:

    如果您使用的是 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2012-11-19
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多