Olá pessoal,
estou com uma dúvida terrível, tenho um arquivo .bin para ler, nesse arquivo contém matrícula, nome do aluno, sexo e peso…
Porém ao ler o arquivo usando o código a seguir algumas informações vem erradas devido ao modo como estou lendo, segue o código:
package selecao;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.RandomAccessFile;
import java.util.StringTokenizer;
public class Selecao {
int mat;
String aluno;
char sexo;
double peso;
private static RandomAccessFile arquivo;
private void abreArquivo(){
StringBuffer sb = new StringBuffer();
try {
FileReader arq = new FileReader("C:/orig_p.bin");
BufferedReader br = new BufferedReader(arq);
String s;
do{
s = br.readLine();
if(s!=null){
sb.append( s + "\r\n" );
}
}while(s!=null);
System.out.println(sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String [] args){
Selecao sel = new Selecao();
sel.abreArquivo();
}
}
Tenho esse código em C que le o mesmo arquivo, e da certo nesse, gostaria de saber se algum me da uma ajuda:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
//#define RAND_MAX 100
void semente(void);
int geranumero(FILE *arq);
struct stru{
int matricula;
char nome[20], sexo[1];
float peso;
} reg;
char buff[33];
int main()
{
int a,s,j,sexo;
double i;
float b,peso;
char alu1[20],alu[10];
FILE *arq;
arq = fopen("origi_c.bin","w+b"); // Abre o arquivo
if(arq == NULL) // Verifica se ocorreu erro
{
printf(" Erro ao abrir arquivo\n");
system("PAUSE");
} //Fim IF
else
{
semente();
for(j=0; j<3000;j++)
{
a = geranumero(arq);
reg.matricula = a; // Matricula recebe a
s = a%2; // Determina o sexo
if (s == 1)
{
strcpy(reg.sexo,"M");
strcpy(alu,"Aluno");
} // Fim IF
else
{
strcpy(reg.sexo,"F");
strcpy(alu,"Aluna");
}
// Cria o nome do Aluno
itoa(a,alu1,10);
strcat(alu,alu1);
strcpy(reg.nome, alu);
// Estabelece o peso do aluno
b = a; // Muda de Inteiro para float
peso = modf((((b-100)/(b+100))*100),&i)*100;
reg.peso = peso;
// Grava o Registro
fwrite(®,sizeof(struct stru),1,arq);
printf("%s",".");
} // Fim FOR
rewind(arq);
printf("\n");
for (j=0;j<10;j++)
{
fread(®,sizeof(struct stru),1,arq); // Leitura usando fread
printf("%-3d %6d %20s %s %2.2f \n",j+1,reg.matricula,reg.nome,reg.sexo,reg.peso);
}
system("PAUSE");
}
fclose(arq); // Fecha o Arquivo
} // Fim main
void semente(void)
/* obt‚m a semente para rand da hora do sistema
e mostra os primeiros 10 n£meros
*/
{
int i, stime;
long ltime;
/* obt‚m a hora de calend rio atual */
ltime =time(NULL);
stime = (unsigned) ltime/2;
srand(stime);
}
int geranumero(FILE *arq)
/*
Esta função gera um número aleatorio único.
caso o número já exista ela gera outro
*/
{
int a;
char continua = 1;
do
{
a = rand();
rewind(arq);
continua = 0;
fread(®,sizeof(struct stru),1,arq); // Leitura usando fread
while (!feof(arq))
{
if (reg.matricula == a)
{
continua = 1;
break;
}
fread(®,sizeof(struct stru),1,arq); // Leitura usando fread
} // Fim While
} while (continua); // Fim do
return(a);
}
Abraços,
Obrigado