[RESOLVIDO]Exercício: Ler do teclado e escrever em arquivo!

Gostaria que vcs olhassem esse meu código para ver pq ele cria o arquivo, mais quando eu abro ele, ele está em branco. Neste arquivo, deveria ter escrito nele oq eu escrevi no teclado. Assim pede o exercício!
O enunciado está assim! " 7) (opcional) Altere novamente o programa para ele virar um pequeno editor: lê do teclado e escreve em arquivo.
Repare que a mudança a ser feita é mínima! "

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class EntradaDeUmArquivo {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {

		InputStream is = System.in;

		Scanner entrada = new Scanner(is);
		while (entrada.hasNextLine()) {
			System.out.println(entrada.nextLine());

		}
		is.close();

		OutputStream os = new FileOutputStream("saida.txt");
		OutputStreamWriter osw = new OutputStreamWriter(os);
		BufferedWriter bw = new BufferedWriter(osw);

		while (entrada.hasNextLine()) {
			String linha = entrada.nextLine();
			bw.write(linha);
			bw.newLine();
		}
		bw.close();

	}

Quem puder ajudar eu agradeço!!!

Fala brow,

Feche os streams que voce abriu…

os.close();
osw.close();

Abraco.

[quote=kenneth]Fala brow,

Feche os streams que voce abriu…

os.close();
osw.close();

Abraco.[/quote]
Primeiramente eu agradeço sua ajuda, mais eu fechei as Streams que vc sugeriu e ficou na mesma, o arquivo é criado porém em branco. Obrigado

Tenta jogar tudo dentro do primeiro while.

Não sei se estou enganado, mas parece que no primeiro while vc pega o valor, imprime na tela e perde ele.

Tenta jogar o conteúdo do segundo while, dentro do primeiro while. E as instanciações, antes do primeiro while tbm.

[quote=claudneto]Tenta jogar tudo dentro do primeiro while.

Não sei se estou enganado, mas parece que no primeiro while vc pega o valor, imprime na tela e perde ele.

Tenta jogar o conteúdo do segundo while, dentro do primeiro while. E as instanciações, antes do primeiro while tbm.[/quote]
É impressionante, não da certo! Acho que algum problema com meu Eclipse. Se não for pedir demais, poderia pegar esse código e roda-lo ai para ver oq tah pegando? abraços

É pedir demais sim (hahaha), mas não rodou aqui tbm com o NetBeans!

Valeu amigo, mais só pedi pq meu Eclipse alguns dias atras estava com um comportamento estranho, então passei a usar NetBens e rodava tudo beleza, removi o Eclipse e instalei novamente e ficou beleza, então estava achando que o problema havia voltado. Mais valeu, obrigado pela ajuda. Vou tentando aqui!!!

Fala brow,

Segunda tentativa…

Talvez nao seria pq vc consome todas as suas entradas no 1o while, dando System.out?
Nao tenho muita intimidade com o nextLine e o hasNextLine(), mas se nao me engano,
o segundo retorna true enquanto houver algo a ser lido, e o primeiro le, e “consome” a proxima linha.

Em resumo, acho que o que acontece eh que vc le toda a entrada, da System.out.println, e quando
chega na hora de escrever no arquivo, nao ha mais o que se escrever.

Nos podemos testar isso, coloque

System.out.println("Tem conteudo: " + entrada.hasNextLine());

antes do 2o while.

Abraco

[quote=kenneth]Fala brow,

Segunda tentativa…

Talvez nao seria pq vc consome todas as suas entradas no 1o while, dando System.out?
Nao tenho muita intimidade com o nextLine e o hasNextLine(), mas se nao me engano,
o segundo retorna true enquanto houver algo a ser lido, e o primeiro le, e “consome” a proxima linha.

Em resumo, acho que o que acontece eh que vc le toda a entrada, da System.out.println, e quando
chega na hora de escrever no arquivo, nao ha mais o que se escrever.

Nos podemos testar isso, coloque

System.out.println("Tem conteudo: " + entrada.hasNextLine());

antes do 2o while.

Abraco[/quote]
Não deu! Acho que vc até tem razão…mais todas as alterações que eu faço simplesmente não da certo. Cheguei até achar que o problema era o Eclipse. Valeu pela paciência!!! Mais o negocio tah osso rs

Certo, mas junto com o “tem conteudo” foi escrito o que? true ou false?

Fica saindo true sem parar até eu interromper o processo…com ou sem “Tem conteúdo:”
Detalhe: dessa forma ele não cria o arquivo.txt

Antes de fazer o close, chame bw.flush();

Agradeço a ajuda Vini, mais não vingou! chamei o bw.flush() antes do bw.close() e nada mudou. Para que serve esse método flush()? Obrigado

Mesmo com o bw.flush() não foi.

Tenta jogar o entrada.nextLine() em uma variável String e usar essa mesma variável em tudo.

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

    InputStream is = System.in;
    OutputStream os = new FileOutputStream("C:\Users\C. Neto\Desktop\saida.txt");
    OutputStreamWriter osw = new OutputStreamWriter(os);
    BufferedWriter bw = new BufferedWriter(osw);

    Scanner entrada = new Scanner(is);
    
    String texto = entrada.nextLine();

    System.out.println(texto);
    bw.write(texto);
    bw.newLine();
    bw.flush();
    is.close();
    bw.close();
    os.close();
    osw.close();

}[/code]

Funcionou aqui desse jeito.

[quote=claudneto]Mesmo com o bw.flush() não foi.

Tenta jogar o entrada.nextLine() em uma variável String e usar essa mesma variável em tudo.

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

    InputStream is = System.in;
    OutputStream os = new FileOutputStream("C:\Users\C. Neto\Desktop\saida.txt");
    OutputStreamWriter osw = new OutputStreamWriter(os);
    BufferedWriter bw = new BufferedWriter(osw);

    Scanner entrada = new Scanner(is);
    
    String texto = entrada.nextLine();

    System.out.println(texto);
    bw.write(texto);
    bw.newLine();
    bw.flush();
    is.close();
    bw.close();
    os.close();
    osw.close();

}[/code]

Funcionou aqui desse jeito.[/quote]
Agora sim…vingo de boa. Valeu pela ajuda e pela paciência Claudneto e todos os outros que dispuseram seus valiosos tempos para me ajudar! Valeu mesmo Abraços

Imagina, mano.

Precisando, é só pedir ajuda aqui.

Eu faria assim:

[code]import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
try {
PrintWriter pw = new PrintWriter(“C:/temp/saida.txt”);
Scanner in = new Scanner(System.in);

		String linha = in.nextLine();
		while (!linha.isEmpty()) {
			pw.println(linha);
			linha = in.nextLine();
		} 
		pw.flush();
		pw.close();			
	} catch (IOException e) {
		e.printStackTrace();
	}
}

}
[/code]

Também testei e funcionou.

Basta ir escrevendo e pressinando enter, para escrever novas linhas. Quando quiser finalizar a escrita, simplesmente pressione enter sem digitar nada.