我编写了一个读取csv文件并将其放入TableModel的程序。我的问题是我想扩展程序,如果csv文件从外部获得更改,我的tablemodel会更新并获取新值。
我现在编程一个调度程序,以便线程休眠大约一分钟,并且如果文件的时间戳发生了变化,则每分钟检查一次。如果是这样,它将再次读取该文件。但我不知道整个程序会发生什么,如果我使用调度程序,因为我写的这个小软件将是一个更大的软件的一部分,它运行在JDK 6上。所以我搜索一个高性能的独立软件获取tablemodel中的更改的解决方案。
有人可以帮忙吗?
答案 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;
}