2016-10-05 2 views
0

Я искал помощь по этому вопросу, и я нашел множество материалов о RAF, но ничего не ответил на мой вопрос, поскольку я просто не могу найти, почему это isn ' работа!Ошибка EOFException при попытке чтения из файла с RandomAcessFile

Как я пытаюсь узнать о RAF позже создать базу данных с ним, я создал простой класс с именем данными, который состоит из этих двух методов:

// Writing the desired String into the file 
public void writeFile (String text) { 
    try { 
     RandomAccessFile raf = new RandomAccessFile("text.dat", "rw"); 
     raf.seek(raf.length()); 
     raf.writeUTF(text); 
     raf.close(); 

    } catch (IOException e) { 
     System.out.println("IOException when writing"); 
    } 

} 

// Reading from the file and returning as a single string 
public String readFile() { 
    String output = ""; 

    try { 
     RandomAccessFile raf = new RandomAccessFile("text.dat", "r"); 
     raf.seek(0); 

     output = raf.readUTF(); 
     raf.close(); 

    } catch (EOFException ef) { 

    } catch (FileNotFoundException e) { 
     System.out.println("File not found"); 
    } catch (IOException e) { 
     System.out.println("IOException when reading"); 
     e.printStackTrace(); 
    } 
    return output;   

} 

Я называю эти методы из моих основной метод в основном классе:

Scanner in = new Scanner(System.in); 
String input; 

Data data = new Data(); 
System.out.print("Input text here: "); 
input = in.nextLine(); 

data.writeFile(input); 

System.out.println(data.readFile()); 

но метод readFile возвращает только пустую строку. Я не могу понять, что не так?

Заранее благодарю за помощь!

+0

При публикации вопросов об исключении вы ДОЛЖНЫ включать полное исключение, отформатированное как код (отступы всего 4 пробела, используя кнопку '{}' в редакторе). Не могли бы вы пойти к своему врачу и ожидать, что он/она будет диагностировать вас, не обсуждая никаких симптомов, кроме «Я плохо себя чувствую»? –

+0

Спасибо, теперь я редактировал свой пост. Это моя первая публикация, и я сожалею, что сделал плохое впечатление от начала. –

+0

Вы сами оставили исключение. – EJP

ответ

1

Вы должны уловить EOFException отдельно и не рассматривать его как ошибку. Вы также можете избавиться от состояния while() и изменить его на true. EOFException вы получаете только то, что достигли конца файла.

Вы также забыли закрыть файл в обоих методах.

+0

Я искал rrue, но я не могу найти ничего, что это значит? Как получилось, что ни одна String не сможет пройти и сохранить в возвращаемой выходной строке? Моему мозгу здесь что-то не хватает. Благодарим за информацию об исключении EOFException! –

+0

Typo. 'True'. Я исправил это. Нет данных, потому что вы не закрыли файл. – EJP

+0

Спасибо! Два метода теперь закрывают файл, но он все равно не работает. Если я изменю условие на true, цикл никогда не закончится. –

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