2014-01-16 25 views
-1

Это мой код:Показать содержимое файла с классом сканера

public static void main(String[] args) { 
    try { 
     Scanner in = new Scanner(new File("f.txt")); 
     System.out.println("Next Double is: "); 
     System.out.println(in.nextDouble()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

И мой «f.txt» в моем классе пути, и я вижу это в моем NetBeans левого колонки (которые показывают файлы классы путь класса).

Но этот код генерирует исключение.

Почему?

Мой «f.txt» Файл:

sdsdsdssf5s1d2s1 d5s s 
s dlsfsf1s2 s1fsd1sd 
sf31s3ds3ds 
dgrh2t4jg6ng52.2 . 32 56. 2df5d5fd 
sds2.3 2. 2 . 265.6 . 5 . 3 2 .f3sdsd 
+2

Что произойдет, если вы делаете, 'Файл F = новый файл («f.txt»);' а затем 'System .out.println (f.getCanonicalPath()); '? –

+0

@HovercraftFullOfEels его результат: 'C: \ Users \ khoy \ Desktop \ NetBeans Projects \ MyProject \ f.txt'. – Sajad

+0

И это соответствует истинному абсолютному пути файла f.txt? –

ответ

2

Я не знаком с NetBeans, но это выглядит многообещающе: Netbeans - Reading a data file in src folder

В сущности, поставить весь путь, а не имя файла или переместить его в папку сборки.

0

Это обычная проблема с veeeeeeeeeeeery в Java-приятелях.

Прежде всего, поймите эту теорию: Если у вас есть пакет com.example, по здравому смыслу вы поставили бы там файл NOO! Вы должны поместить файл в корень всех (папка, предшествующая папке com).

Так что вам нужно положить f.txt в папку MyProject, и все будет хорошо.

О исключении несоответствия старайтесь не использовать такие небезопасные методы, как nextDouble(). Что происходит, так это то, что читатель пытается передать первые 4 байта в виде двойной строки (sd), и, очевидно, это вызовет исключение. Попробуйте прочитать строку за строкой или символ по символу и сделать простой массив символов из списка массивов.

0

Вы также можете рассмотреть возможность использования загрузчика классов для чтения файлов в качестве ресурсов внутри пакетов с использованием getClass().getResourceAsStream("f.txt") ;. Это предпочтительный способ доступа к ресурсам, поскольку вам больше не нужно беспокоиться об абсолютных или относительных путях. Если ресурс находится в вашем пути к классам, вы можете получить к нему доступ.

это рекомендует использовать ClassLoader, возвращаемый Thread.currentThread().getContextClassLoader(), если приложение использует несколько загрузчиков классов

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