2016-04-20 5 views
1

Когда я пытаюсь выполнить Beyond compare exe.ProcessBuilder не работает, когда я передаю аргумент за пределами сравнения

Я не в состоянии передать аргумент для левой и правой стороны файла

public static void exceutecmd() throws ServletException, IOException { 
    boolean is64bit = false; 

    if (System.getProperty("os.name").contains("Windows")) { 
     is64bit = (System.getenv("ProgramFiles(x86)") != null); 
    } else { 
     is64bit = (System.getProperty("os.arch").indexOf("64") != -1); 
    } 

    String bin = "C:\\Optum Symmetry Suite\\Symmetry 9.1\\bin"; 
    String File1 = " C:\\Optum Symmetry Suite\\Symmetry 9.1\\bin\\1.TXT"; 
    String File2 = " C:\\Optum Symmetry Suite\\Symmetry 9.1\\bin\\2.TXT"; 

    System.out.println(bin); 
    String exe = bin; 
    //String configfile = defaultsvaluesSym.get("xml file path"); 
    //System.out.println(configfile); 
    StringBuilder sbd = new StringBuilder(); 
    if (is64bit) { 
     exe = File.separator + "/BC2.exe"; 
    } else { 
     exe = File.separator + "/BC2.exe"; 
    } 

    ****ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "cd \"" 
      + bin + "\" && \"" + bin + exe +"\"",File1,File2);**** 

    builder.redirectErrorStream(true); 
    Process p = null; 
    try { 
     p = builder.start(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
    BufferedReader r = new BufferedReader(new InputStreamReader(
      p.getInputStream())); 
    String line = null; 
    while (true) { 
     try { 
      line = r.readLine(); 
      sbd.append(line); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     if (line == null) { 
      break; 
     } 
    } 
    System.out.println(sbd.toString()); 

} 

Я могу выполнить запредельное сравнивать ехе, но не в состоянии передать аргумент.

Пожалуйста, помогите мне решить этот вопрос

ответ

2

Удалить «CD» часть вашей команды. Вы вызываете свою программу с полным путем и передаете полный путь для аргументов.

exe = File.separator + "/BC2.exe"; 

Char '/' не требуется, поскольку вы уже добавили File.separator.

+0

Спасибо Кучма, я нашел ответ – Karthick

0

общественного недействительный exceutecmd (HttpServletRequest запрос, HttpServletResponse ответа, String имя_файла1, Строка filename2) бросает ServletException, IOException { булева is64bit = FALSE; if (System.getProperty («os.name»). Содержит («Windows»)) { is64bit = (System.getenv («ProgramFiles (x86)»)! = Null); } else { is64bit = (System.getProperty ("os.arch"). IndexOf ("64")! = -1); }

String bin = "C:\\Optum Symmetry Suite\\Symmetry 9.1\\bin"; 

    System.out.println(bin); 
    String exe = bin; 
    // String configfile = defaultsvaluesSym.get("xml file path"); 
    // System.out.println(configfile); 
    StringBuilder sbd = new StringBuilder(); 
    if (is64bit) { 
     exe = File.separator + "BC2"; 
    } else { 
     exe = File.separator + "/BC2.exe"; 
    } 

    /*ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "cd \"" 
      + bin + "\" && \"" + bin + exe + "\"");*/ 

    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "cd \"" 
      + bin + "\" && \"" + bin + exe + "\""+" \""+fileName1+"\""+" \""+fileName2+"\""); 
    builder.redirectErrorStream(true); 
    Process p = null; 
    try { 
     p = builder.start(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
    BufferedReader r = new BufferedReader(new InputStreamReader(
      p.getInputStream())); 
    String line = null; 
    while (true) { 
     try { 
      line = r.readLine(); 
      sbd.append(line); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     if (line == null) { 
      break; 
     } 
    } 
    System.out.println(sbd.toString()); 
    /* 
    * RequestDispatcher rd = 
    * request.getRequestDispatcher("runAccGrouper.jsp"); 
    * rd.forward(request, response); 
    */ 
}