Как получить что-то вроде символа EOF из файла в Java

Всем добрый день.

Я использую sableCC, и он принимает в качестве входных данных объект Reader. Например, этот код работает правильно:

compile (new StringReader ("print 1"));

Поскольку StringReader возвращает -1 после окончания строки:

StringReader sr = new StringReader("print 1");
while (sr.ready())
    System.out.println (sr.read());

дает:

112
114
105
110
116
32
49
-1
... always -1

Но когда я записываю ту же строку в файл "prog", без каких-либо дополнительных строк или символов, и создаю для него FileReader, компилятор разбивает несуществующую вторую строку, поскольку вместо символа -1 FileReader возвращает символ новой строки:

FileReader fr = new FileReader( new File("prog"));
while (fr.ready())
    System.out.println (fr.read());

дает:

112
114
105
110
116
32
49
10

Какой самый короткий способ получить от программы чтения файлов то же поведение, что и от StringReader, или SableCC может позволить сбоку?

1 ответ

Решение

Если FileReader возвращает символ новой строки, потому что в файле есть символ новой строки, даже если ваш текстовый редактор не показывает его.

К сожалению, некоторые редакторы автоматически добавляют новую пустую строку в текстовые файлы при сохранении. Я думаю, например, что emacs и gedit делают это. Попробуйте другой редактор.

Другие вопросы по тегам