Я написал следующий метод для чтения файла, поиска определенного символа «$» и возврата логического значения, указывающего, присутствует он или нет. По какой-то причине я продолжаю получать 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;
}
Все, что я пытаюсь сделать, это прочитать случайный доступа к файлу одной строки и проверьте, присутствует или нет символ «$».
Ну были файлы * * написанные с использованием 'RandomAccessFile.writeUTF'? –
Да, они были написаны с использованием writeUTF – 2013-03-03 18:31:37
Можете ли вы дать короткий, но полный пример, который записывает файл, а затем читает его? Вам не нужно столько кода, как вы здесь, - достаточно просто, чтобы продемонстрировать проблему. –