Ler e escrever em arquivo

3 respostas
S

O que estou fazendo de errado?
Estou precisando gerar números aleatórios, escrever-los em um arquivo.
Ler desse arquivo e mostrar.

Nesse meu código os arquivos gravados são diferentes dos lidos. Outra coisa... porque quando vou lá abrir o arquivo criado, não vejo os números e sim... vários “caracteres estranhos”?
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class matrix 
{
    public static void main (String args[])
    {
    	double vetor1[] = new double[10];
    	double vetor2[] = new double[10];
//Escreve arquivo 1///////////////////////////////////////////////////////
    	try 
    	{
    	DataOutputStream out1 = new DataOutputStream(
    								new BufferedOutputStream(
    								new FileOutputStream("Arquivo.ste")));
    		for (int cc=0;cc<vetor1.length;cc++)
    		{
    			vetor1[cc]= Math.random()*10;
    			out1.writeDouble(Math.random()*10);
    		}

			out1.close();
		} 
    	catch (Exception e) 
		{	System.out.println("Erro de iO");
			e.printStackTrace();	}
///Le arquivo//////////////////////////////////////////////////////
    	try 
    	{
			DataInputStream in1 =  new DataInputStream (
									new BufferedInputStream(
									new FileInputStream("Arquivo.ste")));
			for (int cc=0;cc<vetor2.length;cc++)
    		{
    			vetor2[cc]= in1.read();
    		}
			in1.close();
		} 
    	catch (Exception ex) {
    		System.out.println("Erro de Io");
			ex.printStackTrace();
		}
/////////////////////////////////////////////////////////////////////////
    	for (int cc=0;cc<vetor1.length;cc++)
		{
			System.out.print(vetor1[cc]+" ");
		}
    	System.out.println();
    	for (int cc=0;cc<vetor2.length;cc++)
		{
			System.out.print(vetor2[cc]+" ");
		}
    }
}
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Cassolato[/color][/size] :joia:

3 Respostas

B

Quando vc está lendo do arquivo, vc está usando read();
O método read lê um byte do arquivo e vc jah está colocando esse byte no vetor de double.
Só que o tamanho de um double eh BEM mais q 8 bytes. Eh por isso q tah dando pau.
O q vc escreveu (em binário) seria algo do tipo:
01001001 01011111 01100000 11111001 11001011 11001000 11000001…
Isso eh a representação de um double em binário.
Quando vc está lendo, vc está lendo apenas um byte desse double (por exemplo 01001001) e colocando isso no vetor. Só que esse byte não eh nada e na hora q vc imprimi, o Java está convertendo isso para String, e imprime quadradinhos pq o valor em Hexa desse byte, corresponde a um caracter qq.
Tenta substituir o read por readDouble() e vê se funfa…

Entendeu?
Se tiver dúvidas posta ae…

S

melhorou um pouco… hahahah
mas eu arrumei um outro jeito pra resolver o problema, acho q ficou bem melhor e mais profissional

muito obrigado

W

para gravar:

fw = new FileWriter(diretorio, true);

double valor = Math.random()*10;
String txt = ""+valor + "\n";
fw.write(txt);
fw.close();

Para ler:

File file = new File(diretorio + NOME_ARQUIVO);

// Se arquivo nao existe informa tratador

if (!file.exists()) {

CSIDebug

.println("##TratadorMensagemConsultaParamConveniadas :: trataMensagem --> Não existe arquivo.");

respConsParamConv.setStatus(RespostaConsultaParamConveniadas.ARQUIVO_INEXISTENTE);

return respConsParamConv;

}

// Abre arquivo para tratamento

FileReader fr = null;

BufferedReader br = null;

fr = new FileReader(file);

br = new BufferedReader(fr);

while (br.ready()){

// Le linha do arquivo

String linha = br.readLine();
System.out.print(linha+"\n"); 
            }
             fr.close();
             br.close();
Criado 6 de dezembro de 2006
Ultima resposta 11 de dez. de 2006
Respostas 3
Participantes 3