1

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

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

有人可以帮忙吗?

4

2 回答 2

1

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

此 API 使您能够向监视服务注册一个(或多个目录)。注册时,您告诉服务您感兴趣的事件类型:文件创建、文件删除或文件修改。当服务检测到感兴趣的事件时,它会被转发到注册的进程。注册的进程有一个线程(或线程池)专门用于监视它注册的任何事件。当一个事件进来时,它会根据需要进行处理。

请参阅此处的参考。

哦!此 API 仅适用于 JDK 7(更高版本)。

于 2012-10-27T13:19:45.557 回答
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;
  } 
于 2017-05-04T11:15:04.513 回答