2013-07-23 65 views
-4

我是如何在另一個java程序中啓動程序的新手段!我不知道該怎麼稱呼它。第一個問題是我必須在一個新的線程內完成它?第二個問題是如何調用新程序。我想要調用的程序是「奇蹟般的」。我使用Ubuntu 12.04來運行這個程序,並在我編寫的命令行中使用。 「sudo wondershaper eth0 10000 1000」。 我可以在通用程序中編寫它嗎? 我有一臺服務器,我想處理它的速度!這就是爲什麼我使用它。所以我有一個多線程服務器和代碼是如何在java程序中啓動外部程序

class Client extends Thread { 
    private Socket connectionSocket; 


    public Client(Socket c) throws IOException { 
     connectionSocket = c; 
    } 

    public void run() { 

     String path = "C:/pao/new2/"; 

     File folder = new File(path); 
     File[] listOfFiles = folder.listFiles(); 


     try { 

      String fileToSendStr = readFile(); 
      File fileToSend = null; 
      for (File f : listOfFiles) 

      {    
       if (f.getName().equals(fileToSendStr)) { 
        fileToSend = f; 
        break; 
       } 
      } 
      //System.out.println("Connescting to Client to recieve the part " +fileToSendStr); 
      if (fileToSend == null) { 

      } 
      System.out.println("Sending the chunk to Client " + fileToSendStr + "to the client: " +connectionSocket.getRemoteSocketAddress().toString()); 
      java.util.Date date= new java.util.Date(); 
      System.out.println(new Timestamp(date.getTime())); 
      long length = fileToSend.length(); 
      byte [] longBytes = new byte[8]; 
      ByteBuffer bbuffer = ByteBuffer.wrap(longBytes); 
      bbuffer.putLong(length); 
      connectionSocket.getOutputStream().write(longBytes); 

      BufferedOutputStream bout = new BufferedOutputStream(connectionSocket.getOutputStream()); 
      BufferedInputStream bain = new BufferedInputStream(new FileInputStream(fileToSend)); 

      byte buffer [] = new byte [1024]; 
      int i = 0; 
      while((i = bain.read(buffer, 0, 1024)) >= 0){ 

       bout.write(buffer, 0, i); 


      } 



      System.out.println("chunk sended"); 
      java.util.Date date1= new java.util.Date(); 
      System.out.println(new Timestamp(date1.getTime())); 
      bout.close(); 
      bain.close(); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    private String readFile() throws IOException { 

     BufferedReader r = new BufferedReader(new InputStreamReader(
       connectionSocket.getInputStream())); 
     return r.readLine(); 

    } 
} 

所以當我讀readFile客戶端發送給我。之後,如果它是速度字符串啓動「wondershaper」,並把速度的「命令wondershaper eth0的10000率」內,啓動程序

+0

我不是100%確定,但我想你正在尋找Java的Process類。 –

+0

相關問題:http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream –

+0

謝謝,我沒有看到它! –

回答

1

Process aProcess = Runtime.getRuntime().exec("cmd"); //你可以通過這裏的任何過程

你也可以閱讀這個程序的輸出。

InputStream is = aProcess.getInputStream(); 

PS:你可以通過任何過程中,隨着參數一起,但你不能傳遞之類的東西>>,2>或|或像*

- 來自評論

+0

您可以傳遞任何進程,但不能傳遞諸如'>>','2>'或'|' –

+0

的東西是的,Runtime類對於學習非常重要,在處理控制檯場景的許多情況下非常有用 – user2277872

+0

@VitalijZadneprovskij你可以通過,如果它支持shell。 – Ankit

相關問題