我目前正在编写一款名为Legend of Zork(开发标题)的游戏,主要是为了让我忙于编写代码并在更深层次上学习Java。但是,我被困在一项特定的任务上。
我希望能够将包含的文件夹复制到我的计算机,其他人的计算机,甚至是闪存驱动器上的任何位置,并使其正常运行。当我将程序编译到Jar中时,我需要指定文件夹的路径,以便代码可以使用所需的文件(例如,音乐或电子表格)。我尝试过以下几点:
String dir = System.getProperty("user.dir") + "/resources/";
这将在Eclipse中提供正确的路径(“/ media / MOTHLACHAIN / LegendOfZork / resources /”,这是我用作工作空间的拇指驱动器)并且运行完美,但是当我构建并运行jar时,它将无法运行到期到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
- 音频
- 音乐
- 声音
- bin
- 资源
LegendOfZork文件夹将包含jar文件,无论我想放置程序的哪个位置,例如,资源都是我想要访问电子表格的地方。
任何帮助将非常感激。先谢谢你们!
答案 0 :(得分:1)
尝试使用...
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");
例如......
答案 1 :(得分: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();
}
}