2016-10-26 8 views
1

나는 RandomAccessFile을 사용하여 계속 노력하고 있습니다. 내가 내가 보관하고있어 어떻게 파일에 메시지를 저장하려고 다른Java의 RandomAccessFile에서 읽기/쓰기

//file is the RandomAccessFile 
//newLine is just new line 

한 포인터에서 모든 메시지를 얻기 위해 시도되는 일을하고있어 :

//I want to store a message per line 
public void store(long idx, String message){ 

    file.seek(idx); 
    file.write(message); 
    file.write(newLine) 
} 

이 내가 채우기 방법입니다 파일 :

Stored BYOENDRWEBUVGIFR 
Stored HNXRKZWPAZUYCUHN 
Stored RPRRAXWRBFSRSHJD 
Stored AGTJXZMCFXENBQOH 
Stored QLWXLIBKRPELYHPR 
Stored VBUOVQICIOOTOTYK 
Stored HPDZRPUGIYAFBGJE 
Stored ZGLAIXTBGVCLJAGC 
Stored UZKUXCWGCIVJLMAF 
Stored RIXZSEDXQPAVDWEK 
:

void createDummy(String location) throws IOException { 

    Random r = new Random(); 

    for (int i = 0; i < 10; i++) { 

     long l = i; 
     StringBuffer b = new StringBuffer(); 
     for (int j = 0; j < 10; j++) { 

      b.append((char)r.nextInt(26)+65); 
     } 

     String str = b.toString(); 
     store(l, str); 
     System.out.println("Stored "+str); 
    } 

} 

이 출력했다

읽기 ... 것은 내가 읽고 있어요 방법 : (3,9)을

//I want to retrieve all messages from "from" to "to" 

공개 무효가 (긴 긴에서하는)를 검색 {

long start = from; 
file.seek(start); 

while(start < to){ 
    System.out.println(file.readLine()); 
    start++; 
    file.seek(start); 
    } 
} 

는 검색 호출; 아래의 결과를 얻는다. // Retrieve from 3 to 9;

Read NRPRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 
Read RPRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 
Read PRAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 
Read RAGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 
Read AGTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 
Read GTJQLWXLVBUOVQHPDZRPUZGLAIXTBUZKUXCWGCRIXZSEDXQPAVDWEKBT     WNWFVVYDPEMCSFVQ        RXCZSNOBEPPDKNBB           LCPFDVUXWETHVWJQ              CPCCDTSOCLSEXIST                 QZFCQWMQVEXTOGNG                    SSKTXOYMOBETGVWN                       DWYIMILEXQMSNUBJ 

나는 아래를 검색 할 것으로 예상하지만, 그런 경우가 아니다이다 :

읽기 AGTJXZMCFXENBQOH 읽기 QLWXLIBKRPELYHPR 읽기 VBUOVQICIOOTOTYK 읽기 HPDZRPUGIYAFBGJE 읽기 ZGLAIXTBGVCLJAGC 읽기 UZKUXCWGCIVJLMAF

무엇을 잘못하여 내 검색하세요() 함수를 호출합니다. 모든 의견을 보내 주시면 감사하겠습니다. 고맙습니다.

+2

이 내용도 컴파일됩니까? 'while-loop'는 검색 방법 안에'start

+1

라인을 읽은 다음 1 바이트를 전진시키고 동일한 라인 (처음 바이트 빼기)을 다시 읽습니다. –

+1

죄송합니다. while 루프는 오래되었습니다. 수정했다. 고맙습니다. –

답변

0

두 가지 :

정확히 줄 바꿈 무엇
  1. , 그것은 "\ n을"해야한다. 당신이 당신의 while 루프에서 해당 파일을 읽을 때

  2. , 당신은

    file.seek (시작)를 호출 할 필요가 없습니다;

    . 커서가 자동으로 다음 줄로갑니다.

    file.readLine();

+0

newLine은 System.lineSeparator() 여야합니다. 그리고 그 문제는 독서뿐 아니라 글쓰기도 마찬가지입니다. –