Проверка существования файла не работает

Это мой код:

String path = "/src/cst/org/main/data/data.txt";
    File f = new File( path );
    if( f.exists() ) { 
        yesorno = true;
        System.out.println( "File exists: " + yesorno );
    } else {
        yesorno = false;
        System.out.println( "File does not exist: " + yesorno );
    }

Когда я запускаю это, я всегда получаю «Файл не существует ...», хотя файл точно существует. И если я ввожу полный путь (C:/User/....), он работает, но я хочу, чтобы он работал, сокращая код.

Я знаю, что этот путь действительно работает, потому что в другом классе метод находит мои изображения (.png). Должен ли я что-то добавить, потому что это .txt?


person ColdStormy    schedule 28.06.2013    source источник
comment
Если вы наберете /src/..., это будет абсолютный путь... На компьютере с Windows он гарантированно не существует.   -  person fge    schedule 28.06.2013
comment
Но когда я удаляю /src/, он все равно не может найти мой файл D:   -  person ColdStormy    schedule 28.06.2013
comment
@fge: На самом деле нет. Он займет абсолютный путь на текущем диске. Он может существовать, но это не будет C:\Users\..., если только не задействованы соединения.   -  person Jon Skeet    schedule 28.06.2013
comment
@fge: не обязательно; это будет соответствовать C:\src\....   -  person SLaks    schedule 28.06.2013
comment
Вы уверены, что знаете, какой у вас исполняемый каталог? Если вы используете IDE, я обязательно это проверю. Eclipse несколько раз сбивал меня с толку.   -  person William Morrison    schedule 28.06.2013
comment
@JonSkeet: что-то странное с getClass().getResource().toString(), вывод начинается с: file:/...., почему?   -  person Azad    schedule 28.06.2013
comment
@Azad: Не уверен, почему вы упомянули об этом мне ... но запрашивать пустую строку в качестве ресурса - это странная вещь для начала.   -  person Jon Skeet    schedule 28.06.2013


Ответы (1)


Да, потому что вы делаете это неправильно, вы хотите указать полный путь к файлу.
Использование:

String path=getClass().getResource("/path/to/file").toString().replace("file:/", "");
person Azad    schedule 28.06.2013
comment
Это возвращает путь относительно используемого класса. Это тоже может не сработать. - person William Morrison; 28.06.2013
comment
Это должно работать, так как файл text находится внутри одного из ваших пакетов. Я только что попробовал сделать так, и это сработало, может быть, вы делаете это неправильно. - person Azad; 28.06.2013
comment
Но не работает String path = getClass().getResource("/cst/org/main/data/data.txt").toString(); File f = new File( path ); - person ColdStormy; 28.06.2013
comment
Код: String path = getClass().getResource("/cst/org/main/data/data.txt").toString(); System.out.println( path ); И вывод: файл:/C:/Users/Jannis/workspace/CST-ChampionSelectionTool/bin/cst/org/main/data/data.txt - person ColdStormy; 28.06.2013
comment
@ColdStormy: у меня та же проблема, смотрите отредактированный ответ, это должно сработать. - person Azad; 28.06.2013
comment
Я бы не сделал это. Вы предполагаете, что исходный ресурс на самом деле является файловым ресурсом. Учитывая, что getResource вернет null, если ресурс не существует, я бы просто использовал это... и чтобы читать ресурс, использовал getResourceAsStream... - person Jon Skeet; 28.06.2013