2013-05-08 96 views
1

如何傳遞參數給一個C程序,它需要從一個文本文件中的一些inputstreams (如scanf()的),這是已經保存,我運行的輸入。使用Runtime.getRuntime().exe() in java。傳遞參數給AC代碼與Java

+1

創建一個文本文件並傳遞數據不是很簡單嗎?這是一個奇怪的問題... – Fabiotocchi 2013-05-08 11:28:17

+1

@Fabiotocchi可能是功課。 – millimoose 2013-05-08 11:29:05

+1

你的問題不清楚。 C程序是從它自己打開的文本文件中讀取輸入,還是從'stdin'讀取輸入,並且希望Java程序將文本文件的內容傳遞給它?如果前者是在C文件中硬編碼的文本文件的名稱,還是它期望它作爲參數? – millimoose 2013-05-08 11:31:22

回答

1

Runtime.exe允許您指定要執行的程序以及程序的參數。看看Java API documentation for exec

 

    String[] command = new String[2]; 
    command[0] = "c:\\bin\\someProgram.exe"; 
    command[1] = "c:\\data\\arguments.txt"; 
    Runtime.getRuntime().exec(command); 
 

如果C程序中的數據已經被存儲在一個文件中,應該將文件直接傳遞作爲參數(這取決於,當然,在該方案的確切性質和所需要的任何前處理 - 你需要給我們一個更好的答案的細節)。

+0

這個答案對實質...有點輕...另外,它似乎OP已經儘可能地運行程序。 – millimoose 2013-05-08 11:30:00

+0

這種問題並不多,但我想OP可能會對如何傳遞參數感到困惑 - exec的文檔並不十分清楚。 – 2013-05-08 11:32:32

+0

的確如此,但在這種情況下,我傾向於要求澄清並掩蓋這個問題,如果沒有人願意將代碼片段扔到牆上來查看哪一個會粘住。 – millimoose 2013-05-08 11:36:46

1

它看起來像你想從文件傳遞數據到你的程序,而不是交互式地進行。您可以爲此使用I/O重定向。在unix哲學everything is a file,這有助於你的輸入流stdin也是一個文件。

讓我用一個例子來說明這一點。我會後一

int main(){ 
    int a, b; 
    std::cin >> a >> b; 
    std::cout << a+b << std::endl; 
    return 0; 
} 

你喜歡的東西g++ sum.cpp編譯這個並運行此類似

./a.out 
3 4 

這將打印7如你所期望。但是你必須手動輸入這些數據,如果這些數據保持不變,那麼一遍又一遍地輸入這些數據是沒有意義的。這裏是I/O重定向。我們想要做的是告訴程序,而不是從stdin中讀取,它應該從另一個文件中讀取。

爲了測試這個,創建一個簡單的文本文件input.text並將3 4作爲其內容。現在運行這個程序./a.out < input.txt,如果你改變文件中的數字並再次運行程序,這將再次打印7,你會得到相應的結果。

所以你試圖做的事情與Java或C或者scanf或者其他輸入方式無關。作爲一個附註,而不是使用Runtime,你應該考慮使用commons exec。 爲了更好地理解重定向,請閱讀thisthis

注意:既然你提到你想運行exe文件,我假設你運行的是windows。您可能需要將a.out更改爲a.exe或您的ide編譯成的任何名稱。如果我沒有清楚地解釋某件事情,希望它能幫助我隨時告訴我。

+0

感謝nikhil的答案,但這並不完全是我想 仍然我得到了答案使用輸入/輸出重定向 謝謝你,以及 – 2013-05-09 05:16:25