0

私は現在、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 フォルダーは、jar ファイルが含まれている場所で、プログラムを配置したい場所であり、リソースは、たとえば、スプレッドシートにアクセスしたい場所です。
どんな助けでも大歓迎です。よろしくお願いします!

4

2 に答える 2

1

使ってみて...

File file = new File(".");

これにより、現在の作業ディレクトリへの参照が取得されます。

絶対パスを知る必要がある場合は、次のようなものを使用してください...

file.getAbsoluteFile();

また

file.getCanonicalFile()

詳細については、JavaDocsを参照してください。

File相対パスを定義できるようになりました。したがって、次のようなものFile resources = new File("resources");は の抽象パスを作成します./resources。ここで、これは明らかに実行ポイント (プログラムが実行された場所) に関連しているため、それを考慮する必要がある場合があります。

したがって、フォルダの階層が次のように見えると仮定すると..

+ 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");

例えば...

于 2013-09-21T02:34:09.387 に答える
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();  
     }  
 } 
于 2013-09-21T01:59:58.570 に答える