2013-10-26 16 views
-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,然後搜索。我怎樣才能做到這一點?

+0

護理張貼你的工作? –

+0

首先嚐試使用它,嘗試編碼,並在這篇文章中添加一些代碼,請。 – Christian

+0

這裏有一些提示:http://demeranville.com/how-not-to-parse-csv-using-java/ – tom

回答

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 
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(); 
    } 
} 

谷歌是DSN名稱。

注意:sample.csv必須存在於執行程序的那個目錄中。如果是另一個目錄提及完整路徑。

:中C:\\sample1.csv代替sample1.csv

參考:How to read csv file using JDBC