• 締切済み

stat関数をJavaで実現するには?

C言語をJavaで置き換える質問です。 C言語のプログラムで下記のようなファイルチェックを行っています。  struct stat st;  stat(file, &st);  if ((st.st_mode & 040000) == 0 ||    (st.st_mode & 020000) == 0) {    エラー処理  } 上記の処理をJavaではどのように実現できるでしょうか? 環境は下記の通りです。 OS:Solaris 9 J2SE 5.0 ご教授願います。

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

一番単純な解は、JNIを使って該当部分だけCで書くことでしょう。

wiretaka
質問者

お礼

ありがとうございました。

wiretaka
質問者

補足

やはり単純にJavaでの置き換えは難しそうですね。 Cを使うことは難しいので、仕様の見直しを図ります。 ご回答ありがとうございました。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

040000: S_IFDIR 020000: S_IFCHR でいいですか? java.io.FileクラスのisDirectoryを使えばS_IFDIRの判定はできる。S_IFCHRのほうは相当するメソッドがおそらく存在しない。

wiretaka
質問者

お礼

ご回答ありがとうございました。

wiretaka
質問者

補足

ご解答ありがとうございます。 私も"040000"はisDirectoryで可能というところまでは調査できました。 実際困っているのが"020000"です。 相当するメソッドがないのであれば、何か打開策はないでしょうか? ご存知であればご教授願います。

関連するQ&A

  • ファイル or ディレクトリの判別

    C言語を勉強中です。 stat()を使用してファイルかディレクトリかの判別を行います。 ヘルプを見ると、構造体のst_modeを調べればいいという所まではわかりました。 この構造体のメンバをどう使用すれば、判別出来ますか?

  • 実行ファイルの識別方法?

    自分で何度か試したのですが、うまくいきません。ご存知の方ご教授ください。 ディレクトリを指定してその配下にあるファイル全てを実行ファイルか、シンポリックファイルか、普通?のファイルか判断しようとしましたがどうしても実行ファイルの判断処理でコンパイルエラーになります。 (lstatの使い方がちゃんとわかってない?) だいたい以下のような流れです。 ----------------- DIR *dirp; struct dirent *file; /*ここで指定ディレクトリのオープン処理(省略)*/ while((file = readdir(dirp)) != NULL) { char buff[65536]; struct stat buffer; sprintf(buff,"%s%s",dir_name,f->d_name); // 注)dir_nameは指定されたディレクトリ lstat(buff,&buffer); printf( "FILE[%s]\n",f->d_name); if( S_ISLNK( buffer.st_mode) ) { printf("SLINK!\n"); } else if( S_IXUSR(buffer.st_mode) ) { printf("IXUSR\n"); } else { printf("OTHER\n"); } } /*ディレクトリのクローズ処理(省略)*/ ----------------------------------- というような形です。 else if( S_IXUSR(buffer.st_mode) ) { printf("IXUSR\n"); } の文をぬけばコンパイルもとおり、実行もうまくいくのですが、これが入ってしまうとコンパイル自体「呼び出せるのは関数だけです」という??メッセージのエラーがでてしまいうまくとおりません。 どなたかアドバイスをお願いします。

  • Java で PHP の md5_file

    PHP の md5_file に当たる処理をJavaで実現したいと考えています。 ネットで調べると PHP の md5 に当たる処理はJavaで実現できるサンプルが数多くあるのですが md5_file に当たるものが見当たりませんでした。 Javaでの実現は可能でしょうか?

    • ベストアンサー
    • Java
  • JAVAのアップデートについて

    こんにちは、お世話になります。 JAVAと言うものを理解していない者が質問するのもいけないのですが・・・ アップデートできますよ、とポップアップしてきましたので指示通り進めたのですが、途中でこのようなメッセージが出て進めなくなりました。 『ソースファイルが見つかりません。C:\Documents and Settings\○○○\Local Settings\Temporary Internet Files\Content.IE5\...\jp150050[1].cab ファイルが存在するか、およびこのファイルへのアクセス権があるかどうかを確認してください』 関係ないかもしれませんが、プログラムの追加と削除には以下の物がありました事を追記致しておきます。 J2SE Runtime Environment 5.0 Update 2 J2SE Runtime Environment 5.0 Update 4 Java 2 Runtime Environment,SE v1.4.2_01 Java 2 Runtime Environment,SE v1.4.2_04 Java 2 Runtime Environment,SE v1.4.2_05 Java 2 Runtime Environment,SE v1.4.2_06 この先どうすればいいか教えて下さいませ。

  • Java関連のファイルがいっぱいあります。

    J2SE Runtime Enviroment 5.0 Update 9や、J2SE~10、J2SE~11とか、 Java(TM)6 Update 2や、Java(TM)6 Update 3などといったファイルが、 結構な容量があります。削除してもよろしいのでしょうか。

    • ベストアンサー
    • Java
  • Javaを使用したファイル操作について

    Javaを使用したプログラミングと聞くと、Webアプリケーションの開発というイメージがあるのですが、VBNやbat処理等でできるファイル操作などはできるのでしょうか? また、Javaに限らず、c言語等のプログラミング言語でも可能なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • S_IFREG

    C言語を勉強し始めた初心者です。 質問タイトルにある通り、S_IFREGをググってみると stat関数で 以下フラグが st_mode フィールド用に定義されているようなのですが 「S_IFREG 通常のファイル」のような検索結果が返ってきます。 ここでいうこの通常ファイルとは、どのようなファイルを表すのでしょうか?通常という意味がよくわかりません。

  • Javaで

    相手のコンピューターにこっちにあるプログラムとかを実行してもらえますか? たとえばC言語で書いたプログラムの実行ファイル a.outがあったとします。 そして相手のコンピュータにipアドレスを指定して この実行ファイルを実行してもらうようなコマンドとかjavaのメソッドとかC言語の関数とかありますか? JavaやC言語でなくてもそのような方法があるならどれでもかまわないので教えてください。

    • ベストアンサー
    • Java
  • 待ち行列(キュー、FIFO)を実現するプログラム

    どうも。 「待ち行列(キュー、FIFO)」を実現するプログラムを作成してください。お願いします😢  出来ればC++言語がいいのですが、C言語やJava言語でも構いません。 解説があればありがたいですが そこは自分で見て学ぼうと思いますので。 宜しくお願いします。

  • Visual Cのstat構造体の動作

    はじめまして。 stat構造体をprintf系の関数で出力するときの異常動作で悩んでいます。 stat関数で読み取った複数のstat構造体の日付情報をprintf関数で 出力書式を"%d %d \n"のように連続して出力するとvisual Cだけ、 二つ目の変数が期待した通りに出力できないのでソースをいじって どのような状態で出力できないのか確認したところ、 Visual studio 2012,2013のvisual Cに於いては、 stat構造体の time_t型変数をprintf系関数で出力する場合、その変数以降に 続けて出力する他の変数が正常に出力できなくなることに 気づきました。これはなぜでしょう? 以下のC言語のソースの例では、先にstring変数を出力してstat構造体の time_t型変数を出力した場合(debug2)には問題ないのに、 変数の出力順を入れ替えるとVisual Cではtime_t型変数以降は 正常に出力できません。(debug3) 尚、time_t変数のst_mtime、st_ctime共、同様の結果になります。 printfの書式通りに出力されないだけで、変数の中身は壊れていません。 // 以下サンプルソース wsttes.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/stat.h> #ifdef _HPUX_SOURCE //HP-UXのansi-Cでもコンパイルできるように #define _stat stat #endif int main() { char s1[100]; // s1 struct _stat t1; // t1 strcpy(s1,"testA"); t1.st_atime=111111; // stat構造体を変数として利用しているだけ printf("debug0 s1=%s\n",s1); printf("debug1 t1=%d\n",t1.st_atime); printf("debug2 s1=%s t1=%d\n",s1,t1.st_atime); printf("debug3 t1=%d s1=%s\n",t1.st_atime,s1); return 0; } /*実行結果 Borland C(BCC32) d:\users\work\bc>wsttes debug0 s1=testA debug1 t1=111111 debug2 s1=testA t1=111111 debug3 t1=111111 s1=testA Visual C(visual studio 2012 or 2013) d:\users\work\vc>wsttes debug0 s1=testA debug1 t1=111111 debug2 s1=testA t1=111111 debug3 t1=111111 s1=(null)  ←ここだけ異常? HP-UX ansi-C hp-ux % wsttes debug0 s1=testA debug1 t1=111111 debug2 s1=testA t1=111111 debug3 t1=111111 s1=testA */