2013-07-23 2 views
-4

Я новичок в том, как запустить программу внутри другой Java-программы! и я не знаю, как это назвать. Первый вопрос заключается в том, что я должен делать это в новом потоке? второй вопрос - как вызвать новую программу. Программа, которую я хочу назвать, - «wondershaper». Я использую 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» и поставить скорость внутри «Sudo Wondershaper eth0 10000 скорости» и запустить программу

+0

Я не уверен на 100%, но, я думаю, вы ищете класс процессов Java. –

+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 можно пройти, если он поддерживается оболочкой. – Ankit

Смежные вопросы