Opa…
Tô com um problema na hora de gravar um arquivo que deve ser composto somente de inteiros (aproximadamente 9 mil). O problema é o seguinte:
Todas os métodos que possibilitam gravar inteiros direto para o arquivo de texto, preenchem tudo com uma grande quantidade de caracteres especiais ou nem mesmo é preenchido, ficando com 0k. Tentei fazer de várias formas (BufferedWriter, FileOutputStream, PrintWriter) e não adianta.
O caso é que preciso que o arquivo seja gravado em inteiros, para ao final possua um tamanho de “entradas x 4 bytes”. No caso, a única forma que consegui foi convertendo para string, mas assim não atende meu requisito por conta do tamanho do arquivo que fica maior…
alguém sabe se tem alguma solução ou se é algum problema do recurso mesmo?
Você poderia serializar um objeto com um ArrayList de int
Seria uma alternativa, isso atende ao seu requisito?
romarcio
Usa o método print() ou println() da classe PrintWriter que da certo.
juniorsi
Então…na verdade serialização não seria útil para o que preciso…é uma prática da faculdade, então tenho que seguir umas regras, mesmo sabendo que há outras formas melhores…é complicado hehe.
Com relação ao PrintWriter, quando uso ele, nem gravar os inteiros no arquivo ele não grava…só quando gravo uma string.
romarcio
privatestaticvoidescrever(){Filedir=newFile("C:\TutorialArquivos");Filearq=newFile(dir,"User.txt");try{//neste ponto criamos o arquivo fisicamentearq.createNewFile();//Devemos passar no construtor do FileWriter qual arquivo// vamos manipular.// Esse construtor aceita dois tipos de parâmetros,// File ou String.//O parâmetro true indica que reescrevemos no arquivo// sem apagar o que já existe.// O false apagaria o conteúdo do arquivo e escreveria// o novo conteúdo.// Se não usar o 2° parâmetro, ele por padrão será false.//O mais importante, essa linha abre o fluxo do arquivo FileWriterfileWriter=newFileWriter(arq,false);//Agora vamos usar a classe PrintWriter para escrever//fisicamente no arquivo.//Precisamos passar o objeto FileReader em seu construtorPrintWriterprintWriter=newPrintWriter(fileWriter);//Agora vamos escrever no arquivo com o método println() e print(),// que nos permite escrever linha a linha no arquivo ou mesma linhaprintWriter.println(12345);printWriter.print(6789);printWriter.print(10111213);//o método flush libera a escrita no arquivoprintWriter.flush();//No final precisamos fechar o arquivoprintWriter.close();}catch(IOExceptione){e.printStackTrace();}}
Aqui grava os inteiros sem problema.
juniorsi
Hmm…não estava usando esse flush. Não testei ainda pq deu certo mesmo usando DataOutputStream e DataInputStream (depois vou precisar buscar por bytes)
mas de toda forma depois vou testar sim… E vlw d+ aí todo mundo que ajudou.