2010-12-08 6 views
0

J'intègre le programme c open source avec le programme Java.Logiciel de ligne de commande d'intégration avec programme Java

J'avais essayé d'utiliser JNI mais ce n'était pas approprié loin de ce que je veux faire.

L'utilisation du programme c est la même que ci-dessous.

program_name argument1 [-a maxSize] [-o maxSizeO] ...... [-P] \ 
      in.txt in1.dat in2.dat in1.tmp in2.tmp out.txt 

Je pourrais exécuter ce programme en utilisant la classe ProcessBuilder comme ceci.

ProcessBuilder pb = new ProcessBuilder("program_name", 
             "argument1", 
             "-a", maxSize, 
             "-o", maxSizeO........., 
             int2.tmp, out.txt); 
Process p = pb.start(); 

Mais il y a beaucoup d'arguments optionnels, donc cela semble être un mauvais moyen de maintenir mon programme Java.

Y at-il une idée pour résoudre ce problème dans le bon sens de la conception de logiciels?

Merci d'avance.

Répondre

2

ProcessBuilder est exactement ce dont vous avez besoin. Je viens d'écrire un squelette de code pour vous. Prenez-le et modifiez selon vos besoins.

public Process exec(  
     String programName, 
     Integer maxSize, 
     Integer maxSizeO, 
     String[] inFiles, 
     String outFile) throws IOException { 


    ProcessBuilder pb = new ProcessBuilder(); 

    List<String> cmd = new ArrayList<String>(); 
    cmd.add(programName); 
    if (maxSize != null) { 
     cmd.add("-a"); 
     cmd.add("" + maxSize); 
    } 
    if (maxSizeO != null) { 
     cmd.add("-o"); 
     cmd.add("" + maxSizeO); 
    } 
    if (inFiles != null) { 
     cmd.addAll(Arrays.asList(inFiles)); 
    } 
    if (outFile != null) { 
     cmd.add(outFile); 
    } 

    Process p = pb.start(); 

    return p; 
} 
0

Je vous propose d'abord de définir une interface pour votre fonctionnalité. Cette interface définit des méthodes pour définir les paramètres (obligatoire/facultatif) et pour effectuer le travail réel. Pour commencer, vous ajoutez ensuite une implémentation qui utilise ProcessBuilder pour effectuer le travail. De cette façon, vous pouvez passer de manière transparente à une autre implémentation si vous avez une meilleure solution.

Questions connexes