2011-01-21 4 views
1

Я занимаюсь очень простой программой для анализа текста, используя файлы, предоставленные мне другом. Однако, когда я открываю файл с помощью сканера, как так,Сканер Java не смог прочитать файл

Scanner scan = new Scanner(new File(path)); 
System.err.println(scan.hasNext()); 
while(scan.hasNextLine()) 
    System.err.println(scan.nextLine()); 
System.err.println(scan.next()); 

результат:

false 
Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Scanner.java:855) 
at java.util.Scanner.next(Scanner.java:1364) 
at Test.main(Test.java:18) 

сканер обрабатывает файл (который является длиной около 1400 строк), как пустой.

Может ли кто-нибудь подумать о какой-либо причине, что сканер может не увидеть файл? Я подозреваю, что тот факт, что файл был импортирован из машины Windows, к машине Linux может иметь что-то делать с ним, но мой разум открыт для других возможностей

отредактированных для форматирования и коды ошибки

+1

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

+0

Ничего. –

+2

Показанная трассировка стека включает вызов 'Scanner.next()', но такие вызовы не показаны в фрагменте кода. Какая строка (в вашем коде) исходит? –

ответ

3

Обнаружили ошибку: Посмотрел на файл byte by byte. нашел символ EOF в первом байте. Java игнорирует остальную часть файла.

+0

как вы проверили файл byte by byte –

+0

@Anil - я представил это 2 года назад! Забавно, что ты прокомментировал это сейчас. Я открыл файл с помощью шестнадцатеричного редактора. Вы можете найти несколько видов бесплатных шестнадцатеричных редакторов в сети. Вот я нашел с быстрым поиском: http://frhed.sourceforge.net/en/ –

0

EDIT: Fisrt ошибка была неправильной

Файл может содержать 1400 строк, заполненных пробелами.

+0

Файл следует за форматом \ t \ n. Есть комбинация текста и ценностей. Хотя догадывайтесь. –

+0

Поскольку новая строка также считается пробелом, файл должен иметь не менее 1400 из них, поэтому ваша первая теория не кажется убедительной. –

+0

Нет. Последующие вызовы 'hasNext()' и его родственники возвращают тот же результат, если вы не вызываете 'next()' между ними. Кроме того, вы можете видеть на выходе даже первый вызов 'hasNext()' возвращает false. – Jorn

0

это возможно, произошло для этой проблемы:

1-файл может быть не создан.

2-ваш файл используется для других программ.

3-адрес пути является ложным.

3

я решил его с помощью new Scanner(new BufferedReader(new FileReader(fileName))) вместо new Scanner(new File(fileName))

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