FileExistでマッチしたものがファイルかディレクトリかを判別したい

ASTERIA Warpでこんなことできる?…と思うことなど、ご遠慮なく...(^_-)

FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by hrn » 2016年6月22日(水) 19:39

FileExistで指定ファイルパスのファイル存在を確認出来ますが、指定したものが実際はディレクトリであっても存在と判断されます。
(ファイルパスを/a/b/cとした場合、cがファイルであってもディレクトリであっても存在と判断される)

ファイルのみの存在確認(ディレクトリがあったとしても無いと判断したい)を行いたいのですが、testコマンド等を呼ぶ以外の方法がありましたら確認させて下さい。
hrn
 
記事: 15
登録日時: 2016年6月15日(水) 12:15

Re: FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by hrn » 2016年6月22日(水) 20:12

ちなみに今は以下で行っています。
・FileExistは使用せず、EXEを使用
 ファイルパス : /usr/bin/test
 パラメータ : -f ${flow.対象ファイルパス}
・BranchByComponentPropertyで結果判定
 プロパティ名 : リターンコード
 正規表現 : 0
 →0であればファイル存在、0以外ならファイル非存在 or ディレクトリ存在
hrn
 
記事: 15
登録日時: 2016年6月15日(水) 12:15

Re: FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by itete » 2016年6月22日(水) 21:13

FileExist コンポーネントを利用する方法はわかりません。
私だったら代わりに以下のようにします。

まず FileList コンポーネントを使用し、以下のように指定します。
 ・「ファイル名のパターン」プロパティ: <対象のファイル名>
 ・「対象フォルダー」プロパティ: <対象のファイルのあるフォルダー>
 ・「種別」プロパティ: ファイルのみ
 ・「エラー処理_ファイルが存在しない」プロパティ: (エラーを無視する)

その次に BranchByException コンポーネントを置きます。
 ・「分岐条件」プロパティ: エラー種別
 ・「エラー種別」プロパティ: ファイルが存在しない

ファイルがあれば下方向、なければ右方向に分岐します。
ストリームが変わってしまうので、処理によっては工夫が必要かもしれません。
itete
 
記事: 157
登録日時: 2007年1月09日(火) 12:15

Re: FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by hrn » 2016年6月23日(木) 20:51

アドバイスありがとうございます。
FileListコンポーネントは一覧を取るものだと思ってパラメータ等を確認していませんでした。こういったケースでも使えるのですね。

試してみましたが、一つ問題が発生しました。
対象のファイル名、フォルダはフロー変数で定義されているものとして、ファイル名のパターン、対象フォルダーにフロー変数を指定して行いましたが、
ファイル名が空の場合にフォルダが存在していれば『存在する』と判断されてしまいました。(指定が無い = 全てと解釈されたのかもしれません)

質問の際に記載が無く恐れ入りますが、今回は以下前提として処理を行おうとしております。
・フルパスの内容が入力となる
・渡された内容のエラーケースとして、ファイルやフォルダの指定が誤っていた場合(指定無し含む)は無しと判断させたい
 →無理やりではありますが入力に問題がある可能性を前提として、問題は無しという判断で値チェック等は用意せずに吸収してしまいたい考えです。

御教示頂きました方法ですとまずフォルダとファイルの分解処理を準備する必要と、上記問題が発生した為採用は厳しい状況です。

対象処理はパフォーマンスを求められるものではなく、コマンド呼び出しのオーバーヘッド等も無視出来る為、他の策が無さそうであれば前述の方法でいきたいと思います。

以上、よろしくお願い致します。
hrn
 
記事: 15
登録日時: 2016年6月15日(水) 12:15

Re: FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by itete » 2016年6月28日(火) 20:30

ぴったりの処理をコンポーネントで作ろうとすると逆に大げさになるような気がします。
Javaを使うと、やりたいことは要するに以下のような感じでしょうか。
----------
File file = new File(in[0].strValue());
out.setValue(file.exists() && file.isFile());
----------
これを JavaInterpreter 関数で「ソースコード」に書き、入力にファイルのフルパスを接続、
出力に BranchStart コンポーネントの「条件式」プロパティを接続します。
ファイルがあればtrue、なければfalseが出るので、条件分岐できます。
itete
 
記事: 157
登録日時: 2007年1月09日(火) 12:15

Re: FileExistでマッチしたものがファイルかディレクトリかを判別したい

投稿記事by hrn » 2016年6月30日(木) 10:18

度々の御教示ありがとうございます。
outを使うとなぜかコンパイルエラー(Attempt to resolve method: setValue() on undefined variable or class name: out)となる為、
returnで返すようにしてみましたが目的の動作になる事は確認出来ました。

#フロー変数FilePathをinputとする事 & outの挙動がおかしかったので確認の為処理を細かく書いています
import com.infoteria.asteria.value.Value;
import java.io.File;
import java.lang.String;

String filepath = component.getParameter("FilePath").strValue();
File file = new File(filepath);
Boolean flug = file.exists() && file.isFile();
context.info( "結果=[" + flug + "]" );
//out.setValue(flug);
return flug.toString();

returnだと、後ろで別のフロー変数にマッピングで格納してからで無いと判定が出来ない事、マッピングがフィールドObjectからとなり見た目がイマイチな為
outで出来るようもう少し調べてみます。

ありががとうございました。
hrn
 
記事: 15
登録日時: 2016年6月15日(水) 12:15


Return to ビギナールーム

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]