Salvando resultado em arquivo txt

Galera como como eu exportaria a saida do programa para arquivo txt ?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;



public class test {

	public static void main(String[] args) throws IOException {



		String line;
		Process saida;

		//executa o processo e armazena a referência em 'Saida'
		
		saida = Runtime.getRuntime().exec("cmd /c ipconfig");



		//pega o retorno do processo

		BufferedReader stdInput = new BufferedReader(new 
				InputStreamReader(saida.getInputStream()));

		//printa o retorno
		while ((line = stdInput.readLine()) != null) {
			System.out.println(line);

		}
		stdInput.close();

	}

}

Exemplo na net é o que não falta!

1 curtida

eu conseguir fazer de uma forma mano mas ele não cria um arquivo e sim sobrescrever em um já existente! E no caso eu queria criar um novo arquivo toda vez que eu executar o código.

public class test {

public static void main(String[] args) throws IOException {


	Path path = Paths.get("ArquivoFinal.txt");
	String line;
	Process saida;

	//executa o processo e armazena a referência em 'Saida'
	
	saida = Runtime.getRuntime().exec("cmd /c type arquivo1.txt");



	//pega o retorno do processo

	BufferedReader stdInput = new BufferedReader(new 
			InputStreamReader(saida.getInputStream()));
	
	
	
	//printa o retorno
	while ((line = stdInput.readLine()) != null) {
		Files.write(path, line.getBytes(), StandardOpenOption.APPEND);

	}
	System.out.println("Arquivo escrito");
	
	stdInput.close();

}

}

Bom utilizando o exemplo do meu amigo @LostSoldier
seria dessa forma:

public static void main(String[] args){
String line;
        Process saida;

        //executa o processo e armazena a referência em 'Saida'
        saida = Runtime.getRuntime().exec("cmd /c ipconfig");

        //pega o retorno do processo
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(saida.getInputStream()));
        //cria um arquivo, vc passa o diretorio, caso nao passar o diretorio ele cria na pasta do projeto
        File arquivo = new File("testando.txt");
        //classe responsável pela a escrita no arquivo
        PrintWriter escrever = new PrintWriter(arquivo);

        //printa o retorno
        while ((line = stdInput.readLine()) != null) {
            //escreve no arquivo pulando uma linha
            escrever.println(line);
        }
        //fecha
        escrever.flush();
        escrever.close();
        stdInput.close();

}
1 curtida

Essa nova api ainda não mexi, mas deve ser por causa disso

StandardOpenOption.APPEND

Isso quer dizer que se o arquivo existir, o conteúdo novo será adiciionado ao já existente, ou seja, o arquivo vai crescendo no hd…

Você pode mudar para a opção

StandardOpenOption.TRUNCATE_EXISTING

Que limpa o arquivo e escreve o conteúdo novo…

Dá uma lida na doc

https://docs.oracle.com/javase/7/docs/api/java/nio/file/StandardOpenOption.html

Mas ai no caso não deveria ter os métodos de tratamento de exceção ?

Sim, teria sim, é só um exemplo ai esses tratamentos vc implementa

Não sabia dessa API do java 8 kkk curti ela vou dar uma olhada

Blz vou dá uma olhada aqui

Galera eu conseguir dessa forma, cria o arquivo certinho , agora não sei por mas ele não ler e consequentemente não escreve no arquivo todo o contéudo , nas ultimas linhas ele ignorar .

public static void main(String[] args) throws IOException {

	String line;
	Process saida;


	Path path = Paths.get("124.txt");
	try {
		Files.createFile(path);
	} catch (Exception e) {
		System.err.println(e);
	}



	//executa o processo e armazena a referência em 'Saida'

	saida = Runtime.getRuntime().exec("cmd /c ipconfig");



	//pega o retorno do processo

	BufferedReader stdInput = new BufferedReader(new 
			InputStreamReader(saida.getInputStream()));



	//printa o retorno
	while ((line = stdInput.readLine()) != null) {
		Files.write(path, line.getBytes(), StandardOpenOption.APPEND);

	}

	JOptionPane.showMessageDialog(null, "Arquivo foi escrito");

	stdInput.close();

}

Bom, como nunca utilizei essa API não sei ao certo, mas o problema pode ser algo pela forma de escrita byte a byte

Não seria mais fácil já mandar o próprio processo exportar o arquivo?

Veja se funciona…

Runtime.getRuntime().exec("cmd /c ipconfig > arquivo.txt"); //se existir, limpa e escreve

Runtime.getRuntime().exec("cmd /c ipconfig >> arquivo.txt"); //append

Depois você só pega o arquivo já pronto?

desse jeito funciona, mas ele não mostra a saida , só escreve direto. No caso eu queria mostrar a leitura do arquivo e salva-lo.

Bom mano se é algo só para escrever não é melhor utiliza só o PrintWrite?
ex:

PrintWrite escrever = new PrintWrite(new File("arquivo.txt"));
//escreve pulando linha
escrever.println("escrevendo alguma coisa");
//escreve sem pular a linha
escrever.write("escreve sem pular linha, tudo junto");
escrever.flush();
escrever.close();

ou então usando o bufferedWrite, cujo essa nova API retorna um desse tipo tbm:
ex:

Path path = Paths.get("arquivo.txt");
try (BufferedWriter escrever = Files.newBufferedWriter(path)) {
    escrever.write("print('Hello World');");
}

Verdade , mas no caso eu queria mostrar o conteúdo retornado do processo e ao mesmo tempo salva-lo , no caso eu só ia usar o processo no caso o cmd para ler o arquivo para o meu programa e retorna o resultado , ai no meu programa eu iria mostrar a leitura no caso o conteúdo de tal e salva-lo em algum lugar, mas acontece que quando eu recebo o retorno ele não vem completo e consequentemente não escreve todo o conteudo .

como assim não vem completo mano ? vc fala do texto mostrando a configurações do ip?
Tanto mostrar o conteúdo e salvar vc já sabe!

Tipo arquivos maiores , ele não retorna todo o conteúdo do arquivo e consequentemente ele não salva todo o conteúdo, fiz alguns testes aqui e sempre dá no mesmo , arquivos menos ele captura tudo .

Você poderia passar esse arquivo aqui? para eu ver

O arquivo aqui que eu utilizo são dois de 9 mb , ou seja o arquivo final deveria ter 18mb certo ?! Só quando gera o arquivo final o tamanho é menor logo ele não conseguiu processar tudo . Faz um teste copia algo em um arquivo varias vezes e faz o teste.

Então deixa eu ver se entendi, vc que copiar os conteúdos de dois arquivos diferentes e colocar em apenas 1 arquivo?
Bom, pela lógica q já montei aqui daria, certo vou fazer um teste então! se for isso ai que vc falou