特定のディレクトリからファイルを読み取って処理し、処理したらファイルをアーカイブディレクトリに移動するコードを以下に示します。これはうまくいっています。毎日新しいファイルを受信しており、Control-M スケジューラ ジョブを使用してこのプロセスを実行しています。
次の実行では、その特定のディレクトリから新しいファイルを再度読み取り、このファイルをアーカイブディレクトリ内のファイルでチェックします。コンテンツが異なる場合はファイルのみを処理し、それ以外は何もしません。このジョブを実行するために記述されたシェル スクリプトがあり、このプロセスのログは表示されません。
ファイルが特定のディレクトリと同一である場合、Javaコードでログメッセージを生成し、アーカイブディレクトリで「ファイルが同一である」というログを生成したいと考えています。しかし、これを行う方法が正確にはわかりません。ファイル内の何かを処理または移動するためのロジックを書きたくありません..ファイルが等しいことを確認し、そうであればログメッセージを生成するだけです。私が受け取ったファイルはそれほど大きくなく、最大サイズは 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");
}
}