2015-02-24 2 views
3

Я пытаюсь прочитать файл на Java. Я написал программу и сохранил файл в той же папке, что и моя программа. Тем не менее, я продолжаю получать исключение FileNotFoundException. Вот код:Файл не найден в той же папке Java

public static void main(String[] args) throws IOException { 

     Hashtable<String, Integer> ht = new Hashtable<String, Integer>(); 
     File f = new File("file.txt"); 
     ArrayList<String> al = readFile(f, ht); 
} 

public static ArrayList<String> readFile(File f, Hashtable<String, Integer> ht) throws IOException{ 
    ArrayList<String> al = new ArrayList<String>(); 
    BufferedReader br = new BufferedReader(new FileReader(f)); 
    String line = ""; 
    int ctr = 0; 

    } 
    ... 
    return al; 
} 

Вот трассировки стека:

Exception in thread "main" java.io.FileNotFoundException: file.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.io.FileReader.<init>(Unknown Source) 
    at csfhomework3.ScramAssembler.readFile(ScramAssembler.java:26) 
    at csfhomework3.ScramAssembler.main(ScramAssembler.java:17) 

Я не понимаю, как файл не может быть найден, если он находится в том же каталоге, что и программа. Я запускаю программу в eclipse, и я проверил свои конфигурации запуска для любых паразитных аргументов, и их нет. Кто-нибудь видит, что не так?

+1

Вероятный капюшон, файл не находится там, где вы думаете. Вы можете проверить это, используя что-то вроде 'System.out.println (новый файл (". "). GetAbsolutePath());' который выведет текущую рабочую директорию, где файл должен будет находиться. – MadProgrammer

ответ

0

Файл должен находиться в пути класса, а не в пути источника. Скопируйте файл в папку файлов output/class и он должен быть доступен.

+0

Как передать его в путь класса или даже узнать, где находится путь класса? –

+0

Нет, это не так. 'Файл f = новый файл (« file.txt »);' говорит, что файл должен находиться в текущем «рабочем» каталоге. 'File' не ищет путь к классам для файлов ... на самом деле, он не ищет нигде. – MadProgrammer

+0

Он не использует getResourceFromStream(), поэтому я действительно озадачен комментарием о том, как помещать этот маленький файл данных в путь класса. – chrisinmtown

3

Потому что File - это не то место, где вы думаете. Распечатайте путь, который ваша программа пытается прочитать.

File f = new File("file.txt"); 
try { 
    System.out.println(f.getCanonicalPath()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Пер с File.getCanonicalPath() Javadoc, Канонический путь является и абсолютным и уникальным. Точное определение канонической формы зависит от системы.

+0

, но результат печати показывает, что он находится в той же папке, что и моя программа, где я ожидаю, что это будет. –

+0

@JeremyFisher Затем либо файл не находится в этой папке, либо у вас есть другой код, который делает что-то творческое с дескриптором открытого файла .... вы также «удаляете» файл? –

1

Проверьте конфигурацию запуска Eclipse. Посмотрите на вторую вкладку «Аргументы», в нижней панели которой написано «Рабочий каталог». Это место, где программа запускается и где она ожидает найти файл. Обычно в Eclipse запускается ваша программа с текущим рабочим каталогом, который является базовым каталогом проекта. Если у вас есть файл класса java в исходной папке и используется соответствующий пакет (например, «com.mycompany.package»), тогда файл данных будет находиться в каталоге, например «src/com/mycompany/package», который довольно другой каталог из каталога проекта.

НТН

0

Вы, вероятно, следует проверить этот вопрос: Java can't find file when running through Eclipse

В основном вы должны быть уверены, где выполнение происходит (текущий каталог) и как ваш SO разрешит относительные пути. Попробуйте изменить рабочий каталог в Eclipse 'Запустить конфигурации> Аргументы или указать абсолютное имя файла

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