用Java读取CSV文件

时间:2012-10-27 13:04:45

标签: java csv io

我编写了一个读取csv文件并将其放入TableModel的程序。我的问题是我想扩展程序,如果csv文件从外部获得更改,我的tablemodel会更新并获取新值。

我现在编程一个调度程序,以便线程休眠大约一分钟,并且如果文件的时间戳发生了变化,则每分钟检查一次。如果是这样,它将再次读取该文件。但我不知道整个程序会发生什么,如果我使用调度程序,因为我写的这个小软件将是一个更大的软件的一部分,它运行在JDK 6上。所以我搜索一个高性能的独立软件获取tablemodel中的更改的解决方案。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

java.nio.file包现在包含Watch Service API。这有效:

  

此API允许您使用注册目录(或多个目录)   看表服务。注册时,您告诉服务哪些类型   您感兴趣的事件:文件创建,文件删除或文件   修改。当服务检测到感兴趣的事件时,它就是   转发到注册过程。注册过程有一个   专门用于观察任何事件的线程(或线程池)   已注册。当一个事件进入时,它会根据需要进行处理。

参见参考here

哦!此API仅可从JDK 7(以后版本)获得。

答案 1 :(得分:0)

**OpenCsv is a best way to read csv file in java.
if your are using maven then you can use below dependency or download it's jar from web.**

 @SuppressWarnings({"rawtypes", "unchecked"})
  public void readCsvFile() {
    CSVReader csvReader;
    CsvToBean csv;
    File fileEntry; 
    try {
      fileEntry = new File("path of your file");
      csv = new CsvToBean();
      csvReader = new CSVReader(new FileReader(fileEntry), ',', '"', 1);
      List list = csv.parse(setColumMapping(), csvReader);
     //List of LabReportSampleData class
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  //Below function is used to map the your csv file to your mapping object. 
  //columns String array: The value inside your csv file. means 0 index map with degree variable in your mapping class.
  @SuppressWarnings({"rawtypes", "unchecked"})
  private static ColumnPositionMappingStrategy setColumMapping() {
    ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
    strategy.setType(LabReportSampleData.class);
    String[] columns =
        new String[] {"degree", "radian", "shearStress", "shearingStrain", "sourceUnit"};
    strategy.setColumnMapping(columns);
    return strategy;
  }