Salvar arquivo com a classe PrintWriter em java

5 respostas
java
N

Olá, pessoal!!

Então estou desenvolvendo um programa que gera uma sequencia numérica na verdade eu consigo salvar
em um arquivo .“txt” porém como é um JTextPane que recebe os dados e o mesmo é passado para a classe
PrinteWriter como “.append” ou “.println” ou “.print” mas ele não salva exatamente como é mostrado
no JTextPane ou seja, com espaço, ele salva tudo em uma única linha.

GOSTARIA SABER se é possível ele salvar exatamente como é mostrado no JTextPane?

veja:

public void salvarArquivo () throws FileNotFoundException {

	File arquivo = null;
	JFileChooser chooser = new JFileChooser();
	int resultado = chooser.showSaveDialog(null);
	FileFilter fileFilter = new FileNameExtensionFilter("Arquivo txt", ".txt");

	chooser.addChoosableFileFilter(fileFilter);

	if (resultado == JFileChooser.APPROVE_OPTION) {

		File salvarArquivoEscolhido = chooser.getSelectedFile();
		arquivo = salvarArquivoEscolhido;

		if (salvarArquivoEscolhido.exists() == true) {

			int selecionaOpcao = JOptionPane.showConfirmDialog(null, " O arquivo já existe, deseja sobrescrevê-lo?",
					null, JOptionPane.OK_CANCEL_OPTION);

			if (selecionaOpcao == JOptionPane.OK_OPTION) {


				try {
					
					String j = textPane.getText().toString();

					FileWriter fileWriter;
					fileWriter = new FileWriter (arquivo);					
					PrintWriter pw = new PrintWriter(fileWriter);
					pw.format(j);
					pw.close();

				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}

		} else {

			
			try {
				
				String j = textPane.getText().toString();

				FileWriter fileWriter;
				fileWriter = new FileWriter (arquivo);
				PrintWriter pw = new PrintWriter(fileWriter);
				pw.format(j);
				pw.close();

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	else {

		throw new FileNotFoundException();

	}




}

5 Respostas

S

Você está invocando o método format, esse método recebe como primeiro parâmetro uma String de formataçãoo e em seguida os valores para substituição.

Utilize o método print para gravar o texto puro.

Eu dei uma refatorada em seu código removendo código duplicado e variáveis desnecessárias.

public void salvarArquivo () throws FileNotFoundException {
	JFileChooser chooser = new JFileChooser();
	chooser.addChoosableFileFilter(new FileNameExtensionFilter("Arquivo txt", ".txt"));
	int opcaoSelecionada = chooser.showSaveDialog(null);
	if (opcaoSelecionada == JFileChooser.APPROVE_OPTION) {
		boolean gravar = true;
		File arquivo = chooser.getSelectedFile();
		if (arquivo.exists()) {
			opcaoSelecionada = JOptionPane.showConfirmDialog(null, " O arquivo já existe, deseja sobrescrevê-lo?", null, JOptionPane.OK_CANCEL_OPTION);
			gravar = opcaoSelecionada == JOptionPane.OK_OPTION;
		}
		if (gravar) {
			try {
				String texto = textPane.getText();
				PrintWriter pw = new PrintWriter(new FileWriter (arquivo));
				pw.print(texto);
				pw.flush();
				pw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
N

Então mais mesmo assim ele escreve tudo em uma unica linha na realidade teria que ficar assim veja:

esses numeros gerados dentros de JTextPane estão perfeitos, precisava que do mesmo jeito salva-se em um arquivo “.txt”, mas para chegar em todo essa lógica de números fui concatenando dentro de uma unica String as informações.

N

Não sei se poderia converter isso em um Objeto para não perder a formatação e depois jogar na classe PrintWriter

S

Posta o seu código completo. Imagens não ajudam muito.

N

Obrigado!
Consegui busquei na net aqui e achei isso e deu certo veja:

FileWriter fileWriter;
					fileWriter = new FileWriter (arquivo);					
					PrintWriter pw = new PrintWriter(fileWriter);
					
					String s = textPane.getText();
					s = s.replaceAll("\n", System.getProperty("line.separator"));
					pw.print(s);						
					
					
					pw.close();
Criado 6 de março de 2017
Ultima resposta 7 de mar. de 2017
Respostas 5
Participantes 2