Redireicionamento da saída padrão!

11 respostas
J

Olá a todos.

Gostaria de saber como fazer para redirecionar a saída padrão para um arquivo. A situação é a seguinte: Tenho um programa que executa um outro:

Classe que executa o outro programa:

public class ExecutaOutroPrograma {

          public static void main(String[] args){
           
                    try{
                          Runtime.getRuntime().exec("java HelloWord");                          
                    }     catch(IOException ioe){
                           System.err.println(ioe.getMessage());
                    }


          }
}

Outro programa citado como exemplo:

public class HelloWord {
          
         public static void main(String[] args){
                   System.out.println("Hello Word");
         }
}

A situação é esta, gostaria de saber como faço para que “Hello Word” seja colocado em um arquivo e não na saída padrão (terminal).

Thks in advance.

[size=“11”]
[color=“red”]

  • Editado: Aumente as chances de alguém responder o seu tópico. Use BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários. - Matheus[/color][/size] :joia:

11 Respostas

H

E eu tb gostaria de saber algo parecido,queria saber como um metodo pode ficar durante essa execução direcionar sua saida pra um JTextArea enquanto esta executando ,e exibindo…

J
PrintStream out = new PrintStream(new FileOutputStream(new File("C:\\teste.txt")));
        System.setOut(out);
        System.out.println("isso vai para o arquivo");
H

“jairelton”:
PrintStream out = new PrintStream(new FileOutputStream(new File("C:\\teste.txt"))); System.setOut(out); System.out.println("isso vai para o arquivo");

VocÇe também sabe como seria direcionar pra uma JTextArea?

J

tudo posso no java que me fortalece… :grin:

package Principal;

import javax.swing.*;
import java.io.*;

/**
 *
 * @author Jair
 */
public class Main6 extends JFrame {
    private JTextArea area = new JTextArea();
    
    public Main6() throws Exception {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        
        OutputStream out = new OutputStream(){
            public void write(byte[] b){
                for(int i=0; i<b.length; i++){
                    write(b[i]);
                }
            }
            
            public void write(int i){
                area.append(Character.toString((char) i));
            }
        };
        
        System.setOut(new PrintStream(out));
        
        getContentPane().add(area);
        
                
        System.out.println("teste");
        System.out.println("outroteste");
        
        
        pack();
        setVisible(true);
    }
    
    public static void main(String[] args){
        try{
            new Main6();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
}

é só dar uma aperfeiçoada aí pra ficar mais bunitin…

J

Esta mesma idéia funciona se eu pegar uma instância de execução para rodar? A saída executada pelo programa java que chamei será redirecionada também para o arquivo? *-)

J

O que você quiz dizer com “instancia de execução”, tente explicar melhor…

J

instancia de execução a qual me refiro é algo semelhante a:

public class RodarOutraAplicacao {
         
         public static void main(String[] args) {
                  try{
                           Runtime.getRuntime().exec.("java HelloWord");
                  }        catch(IOException err){
                            System.err.println(err.getMessage());
                  }
         }
}
public class HelloWord {
               
               public static void main(String[] args){
                              System.out.println("Hello Word....");
               }               
}

A classe RodarOutraAplicacao vai rodar a “aplicacao” HelloWord que irá imprimir na saída padrão o texto “Hello Word…”, gostaria que o programa RodarOutraAplicacao fosse capaz de armazenar a saída gerada pela “aplicação” HelloWord. É isso, espero ter esclarecido…

J

Da forma como você está fazendo é criado um outro processo no qual o objeto System.out é a saida padrão do sistema…

mas como isso é um programa Java você nao precisa chamar Runtime.get… é só executar o metodo main dele, assim ele vai rodar no mesmo processo e usar o Sytem.out que você fez…

public class RodarOutraAplicacao { 
         public static void main(String[] args) { 
                  HelloWord.main(args);
         } 
}

antes de chamar essa linha você muda o System.out, e tudo funciona… :grin:

Espero ter ajudado, qualquer coisa é só falar, o e-mail e o msn tá aí tambem…

J

Da forma como você está fazendo é criado um outro processo no qual o objeto System.out é a saida padrão do sistema…

mas como isso é um programa Java você nao precisa chamar Runtime.get… é só executar o metodo main dele, assim ele vai rodar no mesmo processo e usar o Sytem.out que você fez…

public class RodarOutraAplicacao { 
         public static void main(String[] args) { 
                  HelloWord.main(args);
         } 
}

antes de chamar essa linha você muda o System.out, e tudo funciona… :grin:

Espero ter ajudado, qualquer coisa é só falar, o e-mail e o msn tá aí tambem…

J

Entendo perfeitamente que procedendo desta maneira (chamando o main da classe) ela há de excecutar como pretendo, mas a questão é: E se eu não for executar uma aplicação java?

Citei como exemplo de “aplicação” a ser chamada um simples HelloWord por questões de facilidade mesmo, é só um exemplo :slight_smile: Se por acaso eu for rodar uma aplicação de uma outra linguagem, por exemplo, que imprima algo na saída padrão… procedendo da maneira como está não conseguirei capturar a saída…
Estou começando achar que não há como :frowning: eu teria que mudar a saída padrão da outra aplicação que está sendo chamada… :???: :?: :???:

J

Se você nao vai executar uma aplicação java sinto muito mas isso não é possivel, uma integração desse tipo tambem já seria querer demais…

Nesse caso que eu te passei você não está mudando a saída do sistema e sim está mudando o PrintStream que o java usa pra imprimir nela…

Criado 29 de julho de 2005
Ultima resposta 5 de ago. de 2005
Respostas 11
Participantes 3