2016-06-23 8 views
0

zipファイルをzipファイルのようなフォルダに解凍します。例えば。元の/ abc.zipを解凍してインポートする/ abc/zipファイルと同じ名前のフォルダにcamelを使用してファイルを解凍します。

私は今、指定されたフォルダ内のファイルを解凍します。

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("file:" + "</path/to/import>"); 

"から"ファイルからファイル名を取得し、それを "終了"セクションに入れるにはどうすればよいですか?

私はCamelの新機能ですので、どんなヘルプも用意されています。ありがとう!

答えて

3

のようなものを試してみてください。私はあなたのすべての要件をカバーしていると思います。

fromF("file:%s?noop=true","inbox") 
    .split(new ZipSplitter()) 
    .streaming() 
    .toD("file:{{my.outbox}}/${file:onlyname.noext}/"); 

いくつかの注意:エンドポイントでの

  1. 文字列の連結は良い見ていないし、それが エラーが発生しやすくなります。私はfromFを使用し、二番目の パラメータとして私は受信箱のフォルダを与えます。あなたは一定の値からそれを取ることができます。ディレクトリに$ {}プレースホルダを含む動的式を含めることはできません。
  2. あなたは必要ありません.convertBodyTo(String.class)
  3. プロデューサの場合は、プロパティから送信トレイフォルダを取得するtoDを使用しました。 )。あなたは

    PropertiesComponent pc = new PropertiesComponent(); pc.setLocation("classpath:application.properties"); getContext().addComponent("properties」、PC(JavaのDSLのroutebuilderに)このようなラクダに性質が(Mavenプロジェクトのためのsrc /メイン/リソース)、リソースフォルダ内のファイルを追加し、それらをロードすることができ、ここで

    https://camel.apache.org/properties.htmlを詳細を参照してください。
  4. そして最も重要なのは、ファイル言語を利用し、拡張子のない元のzipファイル名を取得するにはfile:onlyname:noextを使用する必要があります。詳細はこちら:https://camel.apache.org/file-language.html

0

ファイルパスをプロデューサからコンシューマにコピーする場合は、file languageを使用できます。

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("$simple{file:path}")); 

よう

何かがファイル名に基づいてフィルタリングについて

を(本来のファイル名に基づいてフィルタリングに答えた): - あなたは

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").fileFilter($org.apache.camel.Exchange.FILE_NAME.contains("xyz")).split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("file:" + "</path/to/import>"); 
よう filter

何かを使用することができます

また、 camelはファイル名自体に正規表現を許可します。 だから、あなたがhttp://camel.apache.org/file2.htmlを見ればあなたがラクダのファイルコンポーネントは、いくつかのヘッダーを設定していることがわかります

from("file:" + "</path/to/original>" + "regex pattern in file name" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("file:" + "</path/to/import>"); 
+0

ありがとうございました!たぶん、私の質問は十分ではなかったかもしれません。私がやりたいことは、 'from(" file: "+" "+" noop = true ")です。 ( "file:" + "" + pathId( "xxx"))split(新しいZipSplitter())ストリーミング.convertBodyTo(String.class) >); ' –

0

のようなものを使用することができます。このルートは、親の名前が抽出されたzipファイルの名前である親フォルダに、送信トレイフォルダに受信トレイフォルダからzipファイルのコンテキストを抽出

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
     .convertBodyTo(String.class).to("file:" + "</path/to/import>" + header("CamelFileNameOnly")); 
関連する問題