2012-04-03 3 views
2

안녕하세요. 누구든지 .dat 파일에 레코드를 가져 오는 방법을 효율적으로 제안 할 수 있습니까? 현재 레코드 수의 유효성 검사를 위해 전체 파일을 반복합니다. 그리고 나서 다시 한 번 레코드를 처리하기 위해 전체 파일을 반복합니다. 따라서 전체 파일을 두 번 반복해야합니다 (레코드 수를 확인하고 처리하기 위해). 레코드 수가 두 번 반복되는 것을 피하는 더 좋은 방법이 있는지는 알고 싶습니다.Java에서 파일 읽기

+0

파일을 직접 만드시겠습니까? 예인 경우 메타 데이터 (예 : 레코드 수)를 파일의 맨 위나 다른 파일에 저장하는 일반적인 (표준이 아닐 경우) 메커니즘입니다. –

+1

혼란스러워. 왜 순차적으로 레코드를 처리 할 수 ​​없습니까? 왜 파일에서 레코드 수를 먼저 알아야합니까? –

+0

.dat 파일의 형식이 무엇인지에 전적으로 달려 있습니다. 어쩌면 레코드는 고정 길이이므로 파일의 길이를 레코드의 길이로 나눌 수 있습니다. 여기 다른 곳에서 제안 된 것처럼 파일 형식에서 레코드 수를 포함하는 헤더를 갖는 것이 일반적입니다. 또는 레코드 수를 앞당길 필요가 없도록 논리를 다시 작성하십시오. –

답변

0

나는 u가 동일한 루프에서 레코드 수 기능과 처리 기능을 함축하도록 노력해야한다고 제안합니다. 모두해야 할 일은 루프 내에서 레코드 수 변수를 유지하고 루프 내에서 ++ 연산자를 사용하여 증가시키는 것입니다 그리고 side-by-side 기능을 수행하십시오. while/for 루프에서 파일의 끝을 확인하면 모든 것이 제자리에있게됩니다.

+0

의견을 보내 주셔서 감사합니다. .dat 파일에서 헤더 레코드는 총 레코드 수를 포함합니다. 먼저 파일에 헤더에 언급 된만큼의 reocrd가 있는지 여부를 평가해야합니다. 개수가 같으면 다른 파일을 처리해야합니다. – prabhakar

+0

당신이 말했듯이 만약 내가 하나의 루프에서 몇 10k 번째 레코드를 처리하는 동안 예를 들어 그 기록 개수가 그 사건에서 내가 모든 처리를 롤백했는지 발견 10k 레코드 및 또한 찍은 시간 그러한 기록을 처리하기위한 목적 또한 낭비됩니다. – prabhakar

0

당신이 (또는 적어도 당신이 그 코드에 액세스 할) 다른 모듈에서 파일을 작성하는 경우, 당신은 첫 번째 줄에 도 RecordCount를 쓸 수 및 쓰기 작업이 발생할 때마다 당신은 도 RecordCount를 업데이트해야 그에 따라.

이제 파일을 읽는 동안 하나의 읽기 만 레코드 수를 확인하고 성공하면 파일을 트래버스 할 수 있습니다.

+0

.dat의 헤더에는 레코드 수가 있습니다. .dat 파일에 헤더 레코드에 지정된만큼의 레코드가 있는지 여부를 확인해야합니다. 하나씩 reocrds를 처리해야 함을 확인한 후. – prabhakar