2017-12-08 11 views
2

私は以下のコードからそれらの長さを読み、それが4Java文字列(ファイルのパス)からCへの送信方法は?

私を返すJavaから...私は4 subfoldesを持っているフォルダを持っ例えばC.

にJavaからいくつかのパスを送りたいです私は良いこれまでのところ、すべてのC

 public Start(){ Thread listeningThread = new Thread(new Runnable(){ 
     public void run(){ 
     new Match(GetDBNumber()); } }); 
     listeningThread.start();} 

との接続機能を呼び出すために開始したスレッドと今

 public static int GetLength(){File file = new File("C:\\Registrations"); 
      File[] files = file.listFiles(new FileFilter(){ 
      public boolean accept(File f) { 
       return f.isDirectory(); }}); 
        return files.length;}  } 

。今MATCH(int型x)はクラスから、私はパスがそのようになります受け取れますCコードのメインフォルダのパスを毎回与える

*PSEUDOCODE*  public class Match { 
         public Match(int len){ 
         System.out.println("subfolders : "+len); 
         for (i=0; i<len; i++) 
         {  //Some way call C programm (like an exe) 
          //with the first,second,third,fourth path 
         } 
         ....  } 

Cコードと毎回呼びたいです。 ..

  int main()  {  
      FILE *fp = fopen(FilePATH, "r"); 
      ...... 
      ......       
      return 0;         } 

私はProcessBuilderをして​​みてくださいしかし、私はこの方法でパスを毎回送るカント...

  ProcessBuilder p = new ProcessBuilder(); 
      //receive.exe is the exe that Codeblocks create after built the C code 
      p.command("C:\\Users\\PC\\Documents\\NetBeansProjects\\TEST\\C\\recieve.exe"); 
     try { 
      p.start(); 
      } catch (Exception e) {System.out.println("Error"); 

      } 
+0

これを実行すると正確に何が起こりますか?両方のプログラムからどのようなエラーメッセージが表示されますか?また、Cプログラムにパラメータを渡しているようではありません。 – dbush

+0

これは私がattempこれはexeを呼び出す。もし私が前にCコードでデフォルトパスを設定していれば、それは実行されます。しかし、私はCがJavaから与えられたパスを読みたいと思っています。だから、私がデフォルトパスを設定せずにこれを試してみると、その作業はまったくできません。 –

+0

"default path"と言うと、現在のディレクトリですか? CプログラムはJVMから継承する必要があります。あなたが本当に望むのは、Javaプログラムがファイル名をパラメータとして渡すことです。 – dbush

答えて

1

エリック・フィッツシモンズで述べたように、 あなたがCの部分が必要になりますJavaからC.

に文字列値を渡すためにJNIを使​​用する必要がありますJavaプログラムで使用可能なdllにすること。 JNIに関して

Oracle has an in-depth JNI write-up

編集

Wikipedia has a JNI article。 JavaとCの間で値を送信する場合は、 しかありません。

  1. JNI。前述のように、Java Native Interfaceはこのために構築されています。これは最善の解決策であるようです。
  2. 外部データストアを使用します。片側のデータストア(ファイルまたはデータベース)に何かを書き込んで、反対側(JavaおよびCの両側)で読み込みます。
  3. 標準出力に書き込むスタンドアロンのCプログラムを作成します。 Java内からそのプログラムを起動します。 javaで書かれたものを読んでください。これは素晴らしい考えではありません。
+0

私はそれをチェックしますありがとう... –

0

多くの変数に依存します。私はあなたがCコードを構築していると仮定し、どのように物事が渡されるかを変更することができますので、...

最も困難する最も簡単:

  • コマンドラインパラメータとして渡す(唯一のCファイルの実行毎に一度動作します)
  • 書き込み/ Cプログラムは見ることができ、ハードドライブ上のテキストファイルを更新します
  • 使用TCP/IPとCの関数を呼び出すために予め指定されたソケットを介して共有ライブラリやDLLや使用JNIなど
  • ビルドメッセージを送信

あなたが専門的にこれをやっていたし、これは大規模な開発努力のほんの始まりだった場合は、より専門的なツールを検討することが賢明だろう。

  • メッセージ・バスは、(ApacheはActiveMQのと呼ばれるものを持っている)ように設計されて
  • 共有キャッシュ(Hazlecastは、JavaをC++や他のほとんどのものに接続し、自由にデータを共有できます)
  • 両方の言語がアクセスできるデータベース内の共有テーブルです。 。

これは、初期の投資をはるかに上回っています(そうでなければ無料です)が、システムが成長するにつれて引き続き利用できる無数の機能を備えています。

関連する問題