我有下面的代码,我从特定的目录中读取文件,处理它,一旦处理,我将文件移动到存档目录。这很有效。我每天都会收到新文件,我使用control-m调度程序作业来运行这个过程。
现在在下一次运行中,我将再次从该目录中读取新文件,并将该文件与存档目录中的文件进行检查,如果内容不同,则只处理该文件,否则不执行任何操作。有一个shell脚本写来做这项工作,我们没有看到这个过程的任何日志。
现在我想在java代码中生成日志消息,如果特定目录中的文件和归档目录中的文件相同,那么生成“files are idential”的日志。但我不知道该怎么做。我不想写逻辑来处理或移动文件中的任何东西。我只需要检查文件是否相等,如果相等,然后生成日志消息。我收到的文件不是很大,最大可以到10mb。
下面是我的代码:
for(Path inputFile : pathsToProcess) {
// read in the file:
readFile(inputFile.toAbsolutePath().toString());
// move the file away into the archive:
Path archiveDir = Paths.get(applicationContext.getEnvironment().getProperty(".archive.dir"));
Files.move(inputFile, archiveDir.resolve(inputFile.getFileName()),StandardCopyOption.REPLACE_EXISTING);
}
return true;
}
private void readFile(String inputFile) throws IOException, FileNotFoundException {
log.info("Import " + inputFile);
try (InputStream is = new FileInputStream(inputFile);
Reader underlyingReader = inputFile.endsWith("gz")
? new InputStreamReader(new GZIPInputStream(is), DEFAULT_CHARSET)
: new InputStreamReader(is, DEFAULT_CHARSET);
BufferedReader reader = new BufferedReader(underlyingReader)) {
if (isPxFile(inputFile)) {
Importer.processField(reader, tablenameFromFilename(inputFile));
} else {
Importer.processFile(reader, tablenameFromFilename(inputFile));
}
}
log.info("Import Complete");
}
}
1条答案
按热度按时间zour9fqk1#
基于有关文件大小或性能需求的有限信息,可以这样做。这可能不是100%优化,但只是一个例子。您可能还必须在main方法中执行一些异常处理,因为新方法可能会引发ioexception: