2013-06-12 20 views
5

ile geçirin Bir processBuilder öğesine ve bir boşlukla ayrılacak parametrelere birden çok parametre aktarmak istiyorum. İşte ProcessBuilder öğesinde birden çok parametreyi bir boşluk

String[] command_ary = {dir+"library/crc"," -s ", fileName," ",addressRanges}; 

ben "dosya adı" ve "addressRange" arasında "fcrc" den sonra ve "-p" den sonra ve bir alanı sağlamak gerekir komuttur.

Teşekkür ederiz

+0

Eğer – darijan

cevap

18

Boşluk eklemenize gerek yoktur. ProcessBuilder sizin için bununla ilgilenecek. Sadece boşluk bırakmadan, tek devre argümanlar birini aktarın: commandline böyle devam ikinci ve birinci argüman, hangi bilmek gerekir, çünkü

ProcessBuilder pb = new ProcessBuilder(
         dir + "library/crc", 
         "-s", 
         fileName, 
         addressRanges); 
+0

Ya doğru şu ama Im kullanarak crc exe crc ve -s arasında ve dosya adı ve adres arasındaki alanı gerektirir iyi bir iş yaptı aralıkları geçti, aksi halde bir dosya bulunamadı istisnası atar – mee

+3

@mee "dosya bulunamadı" hatası başka bir şey neden olmadığından emin misiniz? Eğer 'dosyaAdı' olarak göreceli bir yol kullanıyor iseniz, muhtemelen pb.start() 'işlevini çağırmadan önce işlem için doğru çalışma dizini (' pb.directory (...) 'kullanarak) ayarlamanız gerekecektir. –

10

Biz komut argümanlar arasında boşluk gerekir. Ancak, ProcessBuilder'u kullandığımızda, ona bir dizi iletebiliriz, bu yüzden argümanları ayırt etmek için bu boşlukları eklememiz gerekmez. ProcessBuilder, bazı denetlemeden sonra komut dizisini doğrudan exec'a geçirecektir. Örneğin, yukarıdaki kod mükemmel şekilde çalışacaktır.

Üstelik

Runtime.getRuntime().exec("java -cp C:/testt Test"); 

kullanabilirsiniz Ama ProcessBuilder kullanmak daha uygun olur, bir nedeni bizim argüman alan içeriyorsa biz java -cp C:/testt \"argument with space\" gibi Runtime.getRuntime().exec() yılında alıntı geçmesi gerektiğini, ancak ProcessBuilder ile alabileceğimiz ondan kurtulmak.

ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace"); 
-2

böyle kullanın:

new java.lang.ProcessBuilder('netstat -an'.toString().split('\\s'))).start()

+0

'toString()' – aDoN

+0

Java '' 'ile bile çalışmalıdır' '' tek bir karakter için kullanılır, bir dize değil – Dici

+0

neden aşağı oy aldım, ne heck¿? Gördüğünüz 1 parametreli bir JSP web kabuğu kullanmadınız, hadi, 'CMD_ARRAY'ı kullanın, şimdi ve söyle, çalıştırmayı istediğiniz komutu temel alarak bir dizi parametreyi geçecek misiniz? Beni güldürme ...... aldığım şu oylar OMG'nin diğer yolu olmalı! – aDoN

İlgili konular