Pular linha ao salvar dados em um arquivo txt java

Bom dia Galera, estou fazendo o seguinte… Crio um arquivo bat, e executo ele… No bat tem um comando pra exportar pro C: um arquivo do Registro do windows, na extensão *.reg . Eu leio este arquivo e salvo os dados dele num vetor de strings, depois escreve ele num outro arquivo no formato *.txt. o problema é que quando escrevo no txt ele não pula linha de jeito maneira. Já tentei usar “\r\n”, “%n” . Tanto na parte que lê, e na parte que grava, mas nada vai… Ele salva tudo junto, numa string grande, sendo que no vetor salva certinho tipo cara linha do arquivo.reg numa posição do vetor.
Codigo>>>>

public String codLoja() throws IOException, InterruptedException {

	String[] separa = new String[10000];

	// cria um arquivo bat
	FileWriter createArq = new FileWriter("C:\\CMDcodLoja.bat");

	// classe para escrever no arquivo.
	PrintWriter writeArq = new PrintWriter(createArq);

	writeArq.printf("cd\\"); // escreve CD\
	writeArq.printf("%n"); // Da Enter
	writeArq.printf("REG EXPORT " + "\"HKLM\\SOFTWARE\\LOJAD7\"" + " codLoja.reg"); // comando para copiar a chave
	createArq.close();

	Process pro = Runtime.getRuntime().exec("cmd.exe /c  C:\\CMDcodLoja.bat"); // Executar o bat
	pro.waitFor();

	try {
		
		FileReader lerReg = new FileReader("C:\\codLoja.reg");
		BufferedReader arqRead = new BufferedReader(lerReg);
		
		String line = arqRead.readLine();
		
		int i = 0;
		while(line != null){
			
			separa[i] = line;
			line = arqRead.readLine();
			
			i++;
		}
		
		FileWriter createReg = new FileWriter("C:\\codLoja.txt");
		PrintWriter printArq = new PrintWriter(createReg);
		
		i = 0;
		while(separa[i] != null){
			
			printArq.printf(separa[i]);
			printArq.printf("%n");
			i++;
		}
		
		printArq.close();
		
	} catch (IOException e) {

		e.printStackTrace();
	}

	File file1 =  new File("C:\\codLoja.reg");
	file1.delete();
	File file2 =  new File("C:\\CMDcodLoja.bat");
	file2.delete();
	
	System.exit(0);
	return "";
}
1 curtida

Já tentou usar o println ao invés de usar o printf?

1 curtida

Vc pode usar a Classe BufferedWrite para escrever no arquivo ele tem um método que pula uma linha é o método é newLine()
ex:

FileWriter createArq = new FileWriter("C:\\CMDcodLoja.bat");
BufferedWrite escrever = new BufferedWrite(createArq);
escreve.write("Texto parte 1");
//pula uma linha
escrever.newLine();
escrever.write("Texto parte 2");
escrever.flush();
escrever.close();
1 curtida

tentei e também não foi =/

tentei assim Jean ele continua salvando tudo numa linha só

salva assim no txt

Windows Registry Editor Version 5.00਍ഀ਍ഀ[HKEY_LOCAL_MACHINE\SOFTWARE\LOJAD7]਍ഀ

estes ਍ഀ਍ഀ . Seriam a quebra de linha mas vem assim!

	FileWriter createReg = new FileWriter("C:\\codLoja.txt");
	PrintWriter printArq = new PrintWriter(createReg);
	
	i = 0;
	while(separa[i] != null){
		
		printArq.printf(separa[i]);
		printArq.printf("%n");
		i++;
	}

Nessa parque que eu escrevo no txt…
Pior que quando eu escreve o *.bat ele pula linha certinho, isso que não entendo.

Só por curiosidade… O editor de texto que você tá usando tá com a opção de quebra de linha automática?

Não estava, mas ativei a quebra de linha e mesmo assim não foi!

Eu acabei de fazer aqui e funcionou normal… A única diferença é que eu coloquei o flush() depois do close().

2 curtidas

Mas vc tá usando a Classe q eu te falei?

Usei sim Jean…

		FileWriter createReg = new FileWriter("C:\\codLoja.txt");
		BufferedWriter printArq = new BufferedWriter(createReg);
		
		i = 0;
		while(separa[i] != null){
			
			printArq.write(separa[i]);
			printArq.newLine();
			i++;
		}
		
		printArq.flush();
		printArq.close();

cara, ta estranho isso ai em, é mesmo assim não funcionou?

muito estranho Galera, assim ele foi!!

		FileWriter createReg = new FileWriter("C:\\codLoja.txt");
		BufferedWriter printArq = new BufferedWriter(createReg);
		
		
		printArq.write("TESTE1");
		printArq.newLine();
		printArq.write("TESTE2");
		printArq.newLine();
		printArq.write("TESTE3");
		
		printArq.flush();
		printArq.close();

eu só tirei o While

		i = 0;
		while(separa[i] != null){
			
			printArq.write(separa[i]);
			printArq.newLine();
			i++;
		}

Tenta fazer o seguinte no while vc acrescenta isto aqui:

i = 0;
while(separa[i] != null){
			
printArq.write(separa[i]);
printArq.newLine();
printArq.flush();
i++;
}
1 curtida

Jean, também não…
Eu fui fazer um teste e parece que ta dando certo. Não sei por que esta salvando estes “਍ഀ”…
Acabei de instalar o NotePad ++ e esta abrindo com quebra de linha certinho… O problema esta no bloco de notas mesmo, agora o por que eu não sei… mas acho que assim ja da pra mim trabalhar… haha

NotePad ++ >
Windows Registry Editor Version 5.00਍ഀ
਍ഀ
[HKEY_LOCAL_MACHINE\SOFTWARE\LOJAD7]਍ഀ
"TipoInstalacao"="0"਍ഀ

Bloco de Notas >
Windows Registry Editor Version 5.00਍ഀ਍ഀ[HKEY_LOCAL_MACHINE\SOFTWARE\LOJAD7]਍ഀ"TipoInstalacao"="0"਍ഀ

Vai saber, mas valeu pela ajuda!!

1 curtida

Estranho mesmo, deve ser algum code q ele ta salvando q não é compatível, encontrei este exemplo aqui:

CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
encoder.onMalformedInput(CodingErrorAction.REPORT);
encoder.onUnmappableCharacter(CodingErrorAction.REPORT);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("jedis.txt"),encoder)); 

No seu caso, acho q seria assim:

FileWriter createReg = new FileWriter("C:\\codLoja.txt");
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
encoder.onMalformedInput(CodingErrorAction.REPORT);
encoder.onUnmappableCharacter(CodingErrorAction.REPORT);
BufferedWriter printArq = new BufferedWriter(createReg,encoder);

não testei ai não sei te afirmar :frowning:

1 curtida

Cara é isso mesmo!!

Quando Faço um FileWrite normal, ele salva em UTF-8 acho que nas versões mais novas do java deve ser assim sei la…

Já no arquivo.reg… ele salva no formato encoding UCS-2 LE BOM
Quando passo do *.reg pro txt ele mantem o formato…
vou dar uma pesquisada por encodings aqui, value mesmo!

1 curtida

Fico feliz q me ajudada tenha valido alguma coisa precisar estamos ai :slight_smile:

1 curtida

usando o Notepad ++ consigo ver qual encodings que esta salvo arquivo!

1 curtida

Realmente o Notepad ++ quebra um galho :slight_smile:

Tava procurando a função para pular uma linha no codigo java. então encontrei aqui deu supe certo , agradeço foi muito útil, obrigado…