完整编辑:对,我觉得我认为显而易见的不是那些没有参与这个项目的人,所以这可能会让一些人烦恼,但我会在这里重置细节。
最初: - 我有一系列文本文件,图像文件和声音文件,它们位于我的Eclipse IDE工作区中。虽然我从IDE运行应用程序,但一切都很闪亮。使用File和Scanner类(见下文)加载基于文本的文件(本例中为.DAT),并通过slick2d加载图像和声音(见下文):
// Loading a text based file from the IDE workspace
Scanner scanner = new Scanner(new File("text/intro1.DAT"));
// Loading an image and a sound as handled by slick2d
Image background = new Image("images/backgrounds/menuBG.jpg");
Sound bgm = new Sound("sounds/music/MainMenuTheme.wav");
到目前为止一切正常,但是......
导出: - 当我将文件导出到可运行的jar时,没有任何文本,声音和图像随之导出。我做了一些研究,并了解到如果将导出包含在库的/ lib文件夹中的内容。这有两个影响:
问题: - 查看上面的代码,文本文件夹和声音文件夹存在于生成的导出jar中的完全相同的级别。自从它们都工作的IDE以来,它和路径字符串都没有被更改过。现在,在导出到可运行的jar之后,所有声音和图像文件都被slick2d成功加载,但是所有基于文本的(.DAT)文件现在都在运行时导致FileNotFound Exceptions,即使它们的访问权限还没有改变。
显然,直接意义上的路径没有问题,因为图像和声音仍在加载,但错误仍然存在。
我以错误的方式访问该文件?在slick2d如何管理自己以及尝试以我的方式访问文件之间是否存在某种冲突?
希望这更清楚一点。
答案 0 :(得分:0)
既然你说文件已经移动了我猜你会想要这样的东西
File file = new File("lib/text/intro1.DAT");
Scanner scanner = new Scanner(file);
Scanner scanner = new Scanner(new File("lib/text/intro1.DAT"));
相对文件路径(不以'/'或驱动器号开头的文件路径)从项目/ jar的根开始。
答案 1 :(得分:0)
指定文件的相对路径时,java会解释相对于当前工作目录的相对路径。当前工作目录是运行java命令的位置。
您应该指定文件相对于此目录的位置。
示例:
File located at: drive1/files/yourfile
java run in: drive1/aDir/
In this case you should specify the file's location as: ./../files/yourfile