[JAVA] [Apache Camel] Verwenden Sie die Dateikomponente

Was ist die Dateikomponente?

Die Dateikomponente ist eine Komponente für den Zugriff auf das Dateisystem und kann Dateien und Verzeichnisse eingeben und ausgeben.

Consumer/Producer

Die Dateikomponente spielt sowohl die Rolle des Verbrauchers als auch des Produzenten. Als Verbraucher können Sie Dateien und Verzeichnisse lesen und gelesene Dateien verschieben / löschen. Als Produzent können Sie in Dateien usw. schreiben.

Mit Consumer / Producer können Sie als Beispiel Folgendes erreichen.

Consumer

Producer --Erstellen Sie eine Datei im angegebenen Pfad --Erstellen Sie eine Datei im angegebenen Pfad und erstellen Sie eine Datei mit [Dateiname] .done, wenn die Erstellung abgeschlossen ist.

Komponenten-URI

Der URI für die Verwendung der Dateikomponente sieht folgendermaßen aus:

file:directoryName

Geben Sie für den Kontextpfad (Verzeichnisname) das zu verarbeitende Verzeichnis an. Die Dateikomponente greift auf die Datei zu und verarbeitet sie, die im angegebenen Verzeichnisnamen vorhanden ist. Verschiedene Verarbeitungen können durchgeführt werden, indem Optionen für diesen Kontextpfad angegeben werden. Es gibt viele Optionen für die Dateikomponente. Eine Beschreibung der einzelnen Optionen finden Sie auf der offiziellen Website unten.

https://github.com/apache/camel/blob/master/components/camel-file/src/main/docs/file-component.adoc#uri-options

Auch in diesem Artikel möchte ich einige Optionen anhand einer Beispielimplementierung erläutern.

Implementierungsbeispiel

In diesem Abschnitt zeigen wir ein Implementierungsbeispiel für die Dateikomponente unter Verwendung des in Java DSL beschriebenen Stammverzeichnisses. Die Liste ist auf häufig verwendete Optionen beschränkt. Die aufgeführten Optionen sind nur eine Übersicht. Weitere Informationen finden Sie in der Beschreibung der Dateikomponente auf der offiziellen Website oben.

Beispiel) Kopieren Sie die Dateien in das angegebene Verzeichnis

Das Stammverzeichnis zum Kopieren der Dateien in das angegebene Verzeichnis. Kopieren Sie alle Dateien im Verzeichnis data / input nach data / output. Wenn Sie die Option noop = true angeben, ist sie schreibgeschützt und die Dateien im Daten- / Eingabeverzeichnis werden nicht verschoben oder gelöscht. Wenn Sie die Option noop = true angeben, wird die Option idempotent = true automatisch aktiviert, sodass nicht dieselbe Datei verarbeitet wird.

from("file:data/input?noop=true").to("file:data/output");

Beispiel) Verschieben Sie Dateien in das angegebene Verzeichnis

Das Stammverzeichnis zum Verschieben von Dateien im angegebenen Verzeichnis. Verschieben Sie alle Dateien im Verzeichnis data / input nach data / output. delete = true löscht die Datei nach der Verarbeitung.

from("file:data/input?delete=true").to("file:data/output");

Beispiel) Verschieben Sie Dateien rekursiv in das angegebene Verzeichnis

Dies ist der Stamm, der rekursiv Dateien im angegebenen Verzeichnis verschiebt, einschließlich Dateien, die in Unterverzeichnissen vorhanden sind. Das Unterverzeichnis selbst wird nicht verschoben. Es wird angegeben, rekursiv zu verarbeiten, indem rekursiv = wahr.

from("file:data/input?delete=true&recursive=true").to("file:data/output");

Beispiel) Erstellen Sie nach Abschluss des Vorgangs eine Datei mit dem Namen .done.

Dies ist der Stamm, der die Dateien in das angegebene Verzeichnis kopiert und nach Abschluss des Vorgangs eine Datei mit dem Namen [Dateiname] .done erstellt. Wenn alle Dateien in das Verzeichnis / data / output kopiert wurden, wird im Zielverzeichnis eine Datei [Dateiname] .done erstellt. $ {file: name} steht für den Namen der zu verarbeitenden Datei.

from("file:data/input?noop=true").to("file:data/output?doneFileName=${file:name}.done");

Beispiel) Wenn eine Datei mit dem Namen [Dateiname] .done vorhanden ist, verschieben Sie die Datei.

Im Gegenteil, wenn die Datei [Dateiname] .done vorhanden ist, wird die Datei verschoben.

from("file:data/output?noop=true&doneFileName=${file:name}.done").to("file:data/output.done");

Beispiel) Rufen Sie die Liste der Dateinamen und den Inhalt der Textdatei ab.

Liest die Dateien im Daten- / Eingabeverzeichnis, ruft die Liste der Dateinamen und den Inhalt der Textdatei ab und gibt sie aus. Der FileListProcessor-Prozessor wird in der Prozessmethode angegeben.

from("file:data/input?noop=true").process(new FileListProcessor());

Der FileListProcessor-Prozessor enthält den folgenden Inhalt.

FileListProcessor.java


package example.camelbegginer.file;

import java.util.Map;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class FileListProcessor implements Processor {

	@Override
	public void process(Exchange exchange) throws Exception {
		String body = exchange.getIn().getBody(String.class);
		System.out.println("body: " + body);

		Map<String, Object> headers = exchange.getIn().getHeaders();
		System.out.println("fileName: " + headers.get("CamelFileAbsolutePath"));

	}
}

Bei der Prozessmethode wird der Inhalt der Datei mit dem folgenden Code in die Standardausgabe ausgegeben.

		String body = exchange.getIn().getBody(String.class);
		System.out.println("body: " + body);

Dateiinformationen wie der Dateiname werden in den Nachrichtenkopf aufgenommen. Der Nachrichtenkopf wird wie unten gezeigt erfasst, der Dateipfad wird mit "CamelFileAbsolutePath" erfasst und an die Standardausgabe ausgegeben.

		Map<String, Object> headers = exchange.getIn().getHeaders();
		System.out.println("fileName: " + headers.get("CamelFileAbsolutePath"));

Auf der folgenden Seite finden Sie den Wert, der in den Nachrichtenkopf eingegeben werden soll. https://github.com/apache/camel/blob/master/components/camel-file/src/main/docs/file-component.adoc#message-headers

Zusätzlich zum Dateipfad können Sie Informationen wie Dateigröße und Datum der letzten Änderung abrufen.

Beispiel) Verarbeiten Sie nur Dateien, deren Dateiname die angegebene Zeichenfolge enthält

Diese Route verarbeitet nur Dateien, deren Dateiname die angegebene Zeichenfolge enthält. Verwenden Sie die Option filterFile und schreiben Sie wie folgt.

from("file:data/input?noop=true&filterFile=$simple{file:name} contains 'file1'")
						.to("file:data/output");

filterFile=$simple{file:name} contains 'file1'

Der Wert der obigen Option filterFile stellt den Fall dar, in dem der Dateiname die Zeichenfolge "file1" enthält. Der Wert dieser filterFile-Option wird mit "Simple Expression Language" und "File Language" angegeben.

Die einfache Ausdruckssprache ist die eigene Ausdruckssprache von Apache Camel, die zur Ausgabe der Ergebnisse von Berechnungen und Wertreferenzen verwendet wird und als $ simple {variable} geschrieben ist. Die meisten Berechnungen und Wertreferenzen können mit der Sprache Simple durchgeführt werden. Die Dateisprache ist eine Erweiterung der Sprache für einfache Ausdrücke, mit der Sie auf dateibezogene Werte verweisen können.

Im vorherigen Beispiel stellt "Datei: Name" einen Verweis auf den Dateinamen in der Dateisprache dar, und "$ simple {Datei: Name} enthält 'Datei1'" ist die gesamte Sprache für einfache Ausdrücke und die Zeichen "Datei1" im Dateinamen. Es wird den Fall des Einschlusses von Spalten darstellen.

Einzelheiten zu Simple Expression Language und File Language finden Sie auf der offiziellen Website unten.

Beispiel) Komprimieren Sie die angegebene Datei in zip

Es ist etwas abseits der Dateikomponente, aber um Ihnen eine Vorstellung davon zu geben, wie nützlich Apache Camel ist, sprechen wir über die Dateikomprimierung in Kombination mit der Zip-Komponente. Wenn Sie eine Datei mit dem Namen file1.txt komprimieren möchten, können Sie dies einfach über das folgende Stammverzeichnis tun.

					from("file:data/input?noop=true&fileName=file1.txt")
						.marshal().zipFile()
						.to("file:data/output");

Um das obige "zipFile ()" verwenden zu können, müssen außerdem die folgenden Abhängigkeiten hinzugefügt werden.

pom.xml


		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-zipfile</artifactId>
			<version>${camel.version}</version>
		</dependency>

Referenz

Recommended Posts

[Apache Camel] Verwenden Sie die Dateikomponente
Nur zum Schreiben von Dateien verwenden - Apache Camel
Was ist neu in Apache Camel 2.19.0?
Verwendung von Apache POI
Apache Camel in der Cloud-Ära
Leistungsschaltermuster mit Apache-Kamel