2013-03-03 3 views
0

Я написал следующий метод для чтения файла, поиска определенного символа «$» и возврата логического значения, указывающего, присутствует он или нет. По какой-то причине я продолжаю получать EOFException в строке 224, где он просто говорит «s = raf.readUTF». Все, что я делаю, это чтение записей и их добавление в список массивов. Вот код:Почему я получаю исключение EOF в Java?

public boolean buildComparisonArray(String passedPath) throws FileNotFoundException, IOException{ 
    ArrayList<String> comparisonArray = new ArrayList<String>(); 
    boolean unwantPresent = false; 
    File file = new File(passedPath); 
    RandomAccessFile raf = new RandomAccessFile(file, "r"); 
    raf.seek(0); 
    long num = 0; 
    long fileSize = 0; 
    int record = 0; 
    fileSize = raf.length(); 
     record = 160; 
     num = fileSize/record; 
     String s = "", s2 = "", s3="",s4="",s5="",s6="",s7="",s8=""; 
    long currentPositionOfFilePointer; 
    for(int i=0; i<num; i++){ 
      currentPositionOfFilePointer = raf.getFilePointer(); 
      System.out.println("Current: "+currentPositionOfFilePointer); 
      s = raf.readUTF(); 
      comparisonArray.add(s); 
      System.out.println("Found in file: "+s); 
      for(int j=0; j<20-s.length();j++){ 
       raf.readByte(); 
      } 
      s2 = raf.readUTF(); 
      comparisonArray.add(s2); 
      System.out.println("Found in file: "+s2); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
      s3 = raf.readUTF(); 
      comparisonArray.add(s3); 
      System.out.println("Found in file: "+s3); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
      s4 = raf.readUTF(); 
      comparisonArray.add(s4); 
      System.out.println("Found in file: "+s4); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
      s5 = raf.readUTF(); 
      comparisonArray.add(s5); 
      System.out.println("Found in file: "+s5); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
      s6 = raf.readUTF(); 
      comparisonArray.add(s6); 
      System.out.println("Found in file: "+s6); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
      s7 = raf.readUTF(); 
      comparisonArray.add(s7); 
      System.out.println("Found in file: "+s7); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 

      s8 = raf.readUTF(); 
      comparisonArray.add(s8); 
      System.out.println("Found in file: "+s8); 
      for(int j=0; j<20-s2.length();j++){ 
       raf.readByte(); 
      } 
     } 
    raf.close(); 
    for(String j: comparisonArray){ 
     if(j.contains("$")){ 
      unwantPresent = true; 
     }else if(!j.contains("$")){ 
      unwantPresent = false; 
     } 
    } 
    return unwantPresent; 
} 

Все, что я пытаюсь сделать, это прочитать случайный доступа к файлу одной строки и проверьте, присутствует или нет символ «$».

+2

Ну были файлы * * написанные с использованием 'RandomAccessFile.writeUTF'? –

+0

Да, они были написаны с использованием writeUTF – 2013-03-03 18:31:37

+1

Можете ли вы дать короткий, но полный пример, который записывает файл, а затем читает его? Вам не нужно столько кода, как вы здесь, - достаточно просто, чтобы продемонстрировать проблему. –

ответ

1

После чтения s2 U забыл изменить s2 до s3, s2 к s4 и так далее в вашей для-инструкции

s2 = raf.readUTF(); 
comparisonArray.add(s2); 
System.out.println("Found in file: "+s2); 
for(int j=0; j<20-s2.length();j++){ 
    raf.readByte(); 
} 
s3 = raf.readUTF(); 
comparisonArray.add(s3); 
System.out.println("Found in file: "+s3); 
for(int j=0; j<20-s2.length();j++){ 
    raf.readByte(); 
} 
+0

Я изменил его, но по какой-то причине я все еще получаю ошибку. – 2013-03-03 18:25:24

+1

Я заметил в вашем файле writeFile (...) u написал «if (present = false)», который заставил его пропустить независимо от значения. Также, чтобы сократить код, вы можете просто использовать «for (String str: array) {» для итерации через ArrayList. Я пробовал код, и он работал для меня, пока я использовал ваш writeFile() ... – Wolfii

+0

Итак, вы говорите, что мне нужно изменить оператор if? – 2013-03-04 00:51:47

Смежные вопросы