2013-02-11 41 views
0

我当前正在学习java,需要知道将csv文件的内容复制到数组中并将数组内容复制到csv文件中的最简单方法。 所以目前我有一个包含以下内容的CSV文件employee.csv:将csv文件的内容复制/写入数组

Name,Company,Experience. 

现在我需要有经验的大于2检索员工并把他们包含名称,体验另一个数组。

我想写这个阵列到另一个.csv文件名为results.csv

什么是完成这一任务的最好方法是什么?

回答

2

而不是使用一些库来为你做这个任务,我认为你应该尝试自己编写代码。解析CSV文件对于“正在学习java”的人来说是一个很好的练习。

下面是一个用于保存雇员和解析文件的方法的类。应该有更多的错误检查代码。如果文件中有一行没有逗号,程序将崩溃。我没有为你处理经验值检查。您可以在创建员工时检查它们,只在符合体验要求时将新对象添加到数组中,或者在写入文件之前检查该值。为了简化对文件的输出,我在Employee中编写了一个CSVString方法。

public class Employee { 
    private String name; 
    private String company; 
    private int experience; 

    public Employee(String name, String company, int experience) { 
     this.name = name; 
     this.company = company; 
     this.experience = experience; 
    } 

    public Employee(String name, String company, String exp) { 
     this.name = name; 
     this.company = company; 
     try { 
      experience = Integer.parseInt(exp.trim()); 
     } 
     catch(NumberFormatException utoh) { 
      System.out.println("Failed to read experience for " + name + 
        "\nCannot conver to integer: " + exp); 
     } 
    } 

    public String toCSVString() { 
     return name + "," + company + "," + experience; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getCompany() { 
     return company; 
    } 

    public void setCompany(String company) { 
     this.company = company; 
    } 

    public int getExperience() { 
     return experience; 
    } 

    public void setExperience(int experience) { 
     this.experience = experience; 
    } 
} 

现在读从文件列表:万一期包含在数据

public static ArrayList<Employee> readEmployeeFile(File csvFile) { 
    ArrayList<Employee> list = new ArrayList<>(); 
    Employee joe; 
    try { 
     Scanner in = new Scanner(csvFile); 
     String line; 
     while(in.hasNextLine()) { 
      line = in.nextLine().trim(); 
      String[] col = line.split(","); 
      joe = new Employee(col[0],col[1],col[2]); 
      list.add(joe); 
     } 
     in.close(); 
    } 
    catch(IOException ug) { 
     System.out.println("Error reading line: " + line); 
     System.out.println(ug); 
    } 
    return list; 
} 
+0

,你还不如剥它来解析的数量和比较,如果它是更大大于或等于2.只是一分钱。 – Oneb 2013-02-11 01:51:46

+0

你的意思是这个经历可能是1.5年?如果是这种情况,那么我们可能应该将employee字段更改为float而不是int。 – Thorn 2013-02-11 02:39:07

+0

哦,这是另一种情况。所以我们只需要去掉最后一段时间,以防数据丢失:)。 – Oneb 2013-02-11 02:50:38

0

您可以看看here来找到读取和写入csv文件的方法。

您只需在从employee.csv读取并在写入您的result.csv文件之前检查Experience