2016-10-26 17 views
1

私はRandomAccessFileを使用して私の手を試しています。私は私が保管していますどのようにファイルにメッセージを保存しようとすると、別のJavaのRandomAccessFileからの読み取り/書き込み

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

に1つのポインタからのすべてのメッセージを取得しようとされてやっていることは:

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

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

これは私が埋める方法ですファイル:

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); 
    } 

} 

これは出力した:

Stored BYOENDRWEBUVGIFR 
Stored HNXRKZWPAZUYCUHN 
Stored RPRRAXWRBFSRSHJD 
Stored AGTJXZMCFXENBQOH 
Stored QLWXLIBKRPELYHPR 
Stored VBUOVQICIOOTOTYK 
Stored HPDZRPUGIYAFBGJE 
Stored ZGLAIXTBGVCLJAGC 
Stored UZKUXCWGCIVJLMAF 
Stored RIXZSEDXQPAVDWEK 
私が読んでいるか

読書...:

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

公共ボイドは(3,9)を取得呼び出す{

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

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

(longに長いから)を取得。以下の出力を得ます// Retrieveを3から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

これはコンパイルされますか? 'start

+1

1行を読み込み、1バイト進み、同じ行(最初のバイトを引いたもの)をもう一度読み込みます。 –

+1

申し訳ありませんがwhileループの長いタイプです。修正を行いました。ありがとうございました。 –

答えて

0

2つのこと:

  1. まさに、それは "\ nの" あるべき自分の改行は何ですか。

  2. あなたはwhileループでそのファイルを読んだとき、あなたは

    file.seekを呼び出す必要はありません(スタート)。

    。カーソルは自動的に次の行に移動します。

    file.readLine();

+0

newLineはSystem.lineSeparator()にする必要があります。そしてそれは問題の読書だけでなく、あまりにも書いている。 –

関連する問題