Problemas com arquivos

Olá pessoal, estou gerando alguns arquivos em Java mas estou tendo alguns problemas:

O primeiro é sobre um arquivo que deve ser enviado para CAIXA ECONOMICA FEDERAL (SEFIP), talvez alguém já tenha trabalhado com isso. O que acontece é que quando eu gero o arquivo tendo o servidor da aplicação e do banco de dados rodando em minha máquina (windows), não dá problema algum - o aplicativo da CAIXA que faz a validação do arquivo não acusa problema algum.

Agora, quando eu gero o mesmo arquivo a partir de um servidor linux, o validador da CAIXA não reconhece mais este aquivo, eu tenho que abri-lo no WORDPAD e mandar salvar como “Arquivo MS-DOS” para que ele possa ser lido pelo validador. Alguém sabe o porquê isto estar acontecendo? A seguir o trecho de código de como estou criando o arquivo:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("SEFIP.RE"), "ASCII"));

Minha segunda dúvida é sobre um arquivo bancário para pagamento de salários. Estou gerando um arquivo de pagamento para o Banco Itaú, mas o validador online do banco estava recusando meu arquivo pois estava faltando uma linha em branco no final deste arquivo. Comecei a gerar este arquivo com uma linha em branco no final mas o problema persistiu, até que descobri que o que estava faltando era, na verdade, um Enter no final.

Como é que eu insiro um Enter na gravação do arquivo? Lembrando que este arquivo vai ser gerado em um servidor Linux. A seguir um trecho de como eu estava inserindo esta nova linha ao final do arquivo:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("nome_do_arquivo.txt"), "ASCII")); writer.write("DADOS DA ULTIMA LINHA"); writer.flush(); writer.newLine(); // AQUI ONDE DEVERÁ SER INSERIDO O ENTER

Se alguém puder me ajudar ficarei bastante agradecido.

Opa. writer.write("\r\n");Não funciona?

Até pensei em colocar assim, mas achei que essa codificação serviria apenas em windows (o \r de “return”). Como não tenho como testar essas possibilidades - não possuo acesso ao Itau Bankline para validar o arquivo, não coloquei desta maneira.

Pesquisando mais um pouco encontrei outra forma:

writer.write((char)13);

ele tembém gera uma linha em branco, mas não sei se produz o mesmo efeito de um Enter.

Mas, novamente, como não tenho como testar ainda não posso liberar uma nova versão do sistema com esta modificação, para não gerar desgaste com o cliente.

Use o encoding cp437:

Charset charset = Charset.forName("cp437"); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.txt"), charset));