2012-04-14 3 views
0

Добрый день, все.Как получить smth, как символ 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 позволяет косо?

+0

Какой текстовый редактор вы используете для просмотра/редактирования файла '' prog "'? –

ответ

2

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

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

+0

vi это точно, а emacs - нет. –