2013-09-21 8 views
0

В настоящее время я пишу игру под названием Legend of Zork (название разработки), в основном для того, чтобы держать меня занятым написанием кода и изучением Java на более глубоком уровне. Однако я застрял в конкретной задаче. Я хочу, чтобы иметь возможность копировать содержащую папку в любом месте моего компьютера, чужого компьютера или даже флеш-накопителя и работать. Когда я компилирую программу в Jar, мне нужно будет указать путь к папке, чтобы код мог использовать нужные файлы (например, музыку или электронные таблицы). Я попытался сделать следующее:
String dir = System.getProperty("user.dir") + "/resources/";
, который даст правильный путь в Eclipse («/ media/MOTHLACHAIN ​​/ LegendOfZork/resources /», который является флеш-накопителем, который я использую в качестве рабочего пространства) и работает отлично, но когда я построить и запустить банку, она не будет работать из-за FileNotFoundException. В терминале, набрав «java -jar LegendOfZork.jar», который работает, если я не включаю класс, ссылающийся на файл, говорит, что он ищет «/home/viktor/resources/Weapons.xls», когда он должен выглядеть для «/home/viktor/LegendOfZork/resources/Weapons.xls» или при работе с моего рабочего стола следует искать «/home/viktor/Desktop/LegendOfZork/resources/Weapons.xls» и так далее. иерархии папок моей программы является:
1. LegendOfZork
- аудио
- музыка
- звучит
- бен
- ресурсы
Как получить местоположение папки?

Папка LegendOfZork будет где файл банка содержится, где бы я не захотел поместить программу, и ресурсы будут там, где я хотел бы получить доступ к электронной таблице, например.
Любая помощь будет высоко оценена. Большое спасибо вам за продвинутый!

ответ

1

Try используя ...

File file = new File("."); 

, которая поможет вам ссылку на текущий рабочий каталог.

Если вам нужно знать абсолютный путь, то использовать что-то вроде ...

file.getAbsoluteFile(); 

или

file.getCanonicalFile() 

Смотрите JavaDocs для получения более подробной информации

Теперь File позволяет определить относительные пути. Итак, что-то вроде File resources = new File("resources"); создаст абстрактный путь для ./resources. Теперь это, очевидно, относительно точки выполнения (где была запущена программа), поэтому вам может потребоваться принять это во внимание.

Так если вы папку hirarcy выглядит как ..

+ LegendOfZork 
    ...jar files... 
+ audio 
    + music 
    + sounds 
+ bin 
+ resources 

Например, и ваше приложение было запущено из контекста каталога LegendOfZork, а затем, чтобы получить доступ к каталогу audio, вам нужно будет сделать что-то вроде ...

File audio = new File("../audio"); 
File music = new File(audio, "music"); 
File sounds = new File(audio, "sounds"); 

Например ...

+0

Относительные пути работают на основе каталога, из которого вы запускали Java с, в вашем случае это будет ~. Попробуйте сменить каталоги на/home/viktor/Desktop/LegendOfZork и запустить Jar напрямую (java -jar LOZs.jar), предполагая, что мое понимание структуры вашего каталога верное. – MadProgrammer

+0

Не беспокойтесь, мне потребовалось время, чтобы понять это;) – MadProgrammer

0

Чтобы получить текущий каталог, просто использовать что-то вроде этого:

public class CurrentPath extends java.io.File 
{ 
    private static String path = "."; 
    CurrentPath() 
    { 
     super(path); 
    } 
    String getResult() 
    { 
     return path; 
    } 
    public static void main(String[] args) 
    { 
     CurrentPath cpp = new CurrentPath(); 
     //get path with cpp.getResult(); 
    } 
} 
+1

Я оставил интересно, что случилось с 'currentPath File = новый файл («»)' – MadProgrammer

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