如何获取文件夹的位置?

时间:2013-09-21 01:53:16

标签: java directory filenotfoundexception

我目前正在编写一款名为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文件,无论我想放置程序的哪个位置,例如,资源都是我想要访问电子表格的地方。
任何帮助将非常感激。先谢谢你们!

2 个答案:

答案 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();  
     }  
 }