2017-02-16 9 views
1

ランダムファイルアクセスを使用して、各レコードの姓とメジャーを読み取り、シーケンシャルファイルに書き出します。これらのレコードを画面に表示します。私が立ち往生しているところでは、raf.seekが特定の文字だけで止まるようにしようとしているので、表示するデータを知っているので、文字7-18と文字34-50を見つけなければなりません。もし私がそのファイルを文字列に変換すればもっと簡単になるのだろうかと思っています。Java Randアクセスファイルを使用して特定の文字をファイルから取得する

例のデータファイル

nnnnnnaaaaaaaaaaabbbbbbbbbbbb939ccccccccccccccccc

125546Jonesボブ045Computer科学
334535Brownスティーブ023Chemistry
227863Finklesteinルディ056History
443456Howlerイアン038Computer科学
883643Morrisonトニー045Physics

出力ファイル

ジョーンズコンピュータサイエンス

ブラウン化学

Finklestein歴史

ハウラーコンピュータサイエンス

モリソン物理

画面にも表示されます:

ジョーンズコンピュータサイエンス

ブラウン化学

Finklestein歴史

ハウラーコンピュータサイエンス

モリソン物理

ここ

私がこれまで持っているものです:

import java.io.File; 
import java.io.RandomAccessFile; 
import java.io.IOException; 

public class RandomAccessFileDemo { 

    private static void doAccess() { 

     try { 

      File file = new File("myfile.txt"); 
      RandomAccessFile raf = new RandomAccessFile(file, "rw"); 

      // Read a character 
      byte ch = raf.readByte(); 
      System.out.println("Read first character of file: " + (char)ch); 
      System.out.println("Read full line: " + raf.readLine()); 
      raf.seek(4); 
      System.out.println("Read line 4: " + raf.readLine()); 
      // Seek to the end of file 
      raf.seek(file.length()); 

      // Append to the end of the file 
      raf.write(0x0A); 
      raf.writeBytes("This will complete the Demo"); 
      raf.close(); 

     } catch (IOException e) { 
      System.out.println("IOException:"); 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     doAccess(); 
    } 

} 
+0

'raf.seek(4); System.out.println( "Read line 4:" + raf.readLine()); ** ** FAIL ** –

答えて

1
 System.out.println("Read full line: " + raf.readLine()); 
     raf.seek(4); 
     System.out.println("Read line 4: " + raf.readLine()); 

RandomAccessFileのシーク方法は、バイト単位でそれを移動する行の数でオフセットを移動しません。 - オフセット位置、ファイルポインタを設定している時に、ファイルの先頭からのバイト数で測定さ

http://www.tutorialspoint.com/java/io/randomaccessfile_seek.htm

POS

はここからの抜粋です。

したがって、ファイルポインタを移動してレコードを読み取るバイト数を計算する必要があります。

ループ内でreadLineを使用し、各行を解析して必要なデータを抽出することをお勧めします。


0

私はあなたがwhileループで行ごとにファイルを読むべきだと思います(ファイルの最後を取得しないうちに、次の行を読む)。各反復で、行を文字列に変換し、その行を解析し、興味のあるものを印刷することができます。

これは一般的なファイルアナライザです。

関連する問題