文件未找到仅基于文本的异常文件

时间:2012-08-14 20:22:32

标签: java filenotfoundexception

完整编辑:对,我觉得我认为显而易见的不是那些没有参与这个项目的人,所以这可能会让一些人烦恼,但我会在这里重置细节。

最初: - 我有一系列文本文件,图像文件和声音文件,它们位于我的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文件夹中的内容。这有两个影响:

  • 这打破了IDE中的所有链接。看到现在一切都存在于./lib / ...
  • 但是,因为lib的内容直接导出到jar的顶层(至少我正在使用Eclipse和JarSplice这样做)这个修复了区别。至少在我试图解决问题之前。

问题: - 查看上面的代码,文本文件夹和声音文件夹存在于生成的导出jar中的完全相同的级别。自从它们都工作的IDE以来,它和路径字符串都没有被更改过。现在,在导出到可运行的jar之后,所有声音和图像文件都被slick2d成功加载,但是所有基于文本的(.DAT)文件现在都在运行时导致FileNotFound Exceptions,即使它们的访问权限还没有改变。

显然,直接意义上的路径没有问题,因为图像和声音仍在加载,但错误仍然存​​在。

我以错误的方式访问该文件?在slick2d如何管理自己以及尝试以我的方式访问文件之间是否存在某种冲突?

希望这更清楚一点。

2 个答案:

答案 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