2015-01-28 5 views
1

Я довольно новичок в обработке (и программировании в целом).Как использовать относительный путь вместо абсолютного пути обработки?

В проекте, который я делаю мне нужно, чтобы получить доступ к следующему пути:

f = new File("C:/Users/Matthew/ColourFeature/data/image1.jpg"); 

Это, будучи абсолютным путем, работает без каких-либо проблем.

Однако, поскольку эта программа будет работать на разных машинах, я пытаюсь выяснить, как использовать относительный путь в обработке для доступа к указанному выше пути. Кстати, для моего проекта я не могу использовать loadImage().

Любая помощь будет принята с благодарностью

+1

Является ли image1.jpg частью вашего приложения или предоставленными пользователем данными? – BetaRide

+0

Crossposted: http://forum.processing.org/two/discussion/9209/how-to-use-a-relative-path-instead-of-an-absolute-path-in-processing#latest –

+0

@BetaRide yes image1.jpg является частью приложения. В принципе, это будет одно изображение из коллекции изображений – peterS

ответ

1

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

Вставьте все ваши изображения (или любые другие файлы, если на то пошло) в папку данных, и вам обычно не нужно указывать абсолютный путь в большинстве случаев (например, с помощью loadImage()).

Конечно, поскольку вы сказали, что не можете использовать loadImage(), вы всегда можете получить доступ к пути к папке с данными, используя предоставленный метод dataPath("").Например, когда я

println(dataPath("")); 

из моего примера эскиза, я получаю следующий результат: /Users/stephenbuchanan/Documents/Processing/testsketch/data

2

Вы можете получить домашнюю папку пользователя по:

String userHome = System.getProperty("user.home"); 

Что в вашем случае будет возвращать "C:/Users/Matthew".

Если вы согласны использовать фиксированный путь внутри этого, вы можете получить файл изображения, как:

f = new File(userHome, "/ColourFeature/data/image1.jpg"); 

Этот constructor of File принимает 2 аргумента: родительский папку и папку с по сравнению с детьми и/или файл.

Теперь этот файл f будет указывать на соответствующий файл на всех компьютерах, если у текущего пользователя в системе есть файл с именем "image1.jpg" в папке "/ColourFeature/data" внутри его/ее домашней папки.

+0

Благодаря icza это решило мою проблему – peterS

1

Если файл находится внутри вашего кода, вы можете использовать метод классаLoader.

например

File newFile = new File(YourClass.class 
        .getResource("relative/path/from/YourClass.java") 
        .toString()); 

Если вам необходимо получить доступ к файлам в родительском каталоге класса можно использовать метод, описанный @palacsint here

нормализуют() методы (есть четыре из них) в классе FilenameUtils может помочь вам. Он находится в библиотеке IO Apache Commons.

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
0

Спасибо за помощь. Я оказался довольно простым. Решение заключается в следующем:

f = new File(dataPath(""), "/image1.jpg"); 

Однако следует отметить, что использование в качестве dataPath("") глобальной переменной дают другой путь (я полагаю, это путь этюдник), а затем с помощью dataPath("") в методе установки.

Прошу прощения, если я не использовал правильные технические слова, но я довольно новичок в программировании.

Еще раз спасибо

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