2016-03-19 20 views
0

Ich bin wirklich in zwei Teile stecken. A) Ich brauche das Programm, um das Verzeichnis der RUNNING JAR FILE zu finden und zu überprüfen, ob es eine Datei namens "credits.txt" im gleichen Verzeichnis gibt. B) Wenn nicht, würde es die Datei im gleichen VERZEICHNIS erstellen.Java - Erstellen Sie eine Datei im gleichen Verzeichnis wie die .jar, wenn sie nicht bereits existiert

Das Hauptproblem ist nicht in der Lage, den Pfad meiner Datei zu erhalten.

Angenommen, die laufende JAR-Datei befand sich in einem Ordner namens "Server", das Programm speicherte den Namen "Server" in einer Zeichenfolge und prüfte dann, ob in dieser Zeichenfolge eine Datei vorhanden ist. Wenn ja, tun Sie nichts, andernfalls erstellen Sie die Datei.

@Override 
public void onEnable(){ 
    getLogger().info(ChatColor.GREEN + "Credits has been enabled!"); 
    File file = new File("Credits.txt"); 

    //HERE I NEED THE PROGRAM TO CHECK WHAT DIRECTORY THE RUNNING JAR FILE IS FROM 
    if (file.exists(//IN THE SAME DIRECTORY AS THE RUNNING JAR FILE)){ 
     getLogger().info(ChatColor.DARK_GREEN + "Credits File Exists"); 

    }else{ 
     getLogger().info(ChatColor.DARK_RED + "Credits File Doesn't Exist!"); 
     //HERE IT NEEDS TO CREATE THE FILE IN THE SAME DIRECTORY OF THE JAR FILE "credits.txt" 

    } 
+4

Und was ist deine Schwierigkeit? Beachten Sie, dass das aktuelle Arbeitsverzeichnis (wo es nach Dateien ohne vollständigen Pfad sucht) nicht unbedingt die Position der Datei "jar" ist. – RealSkeptic

+1

Nein, es ist keine "einfache Sache", und tatsächlich scheint Java zu versuchen, Sie davon abzuhalten, dies zu tun. Ich erinnere mich nicht an die Details, wie man das Jar-Verzeichnis findet, aber es beinhaltet einige Verzerrungen. Ich scheine mich an die Notwendigkeit zu erinnern, einige "Sicherheits" -Klassen oder Methoden zu verwenden. Suchen Sie nach dem Pfad zu einer JAR-Datei, um die Details zu erhalten. –

+1

Ah, [hier ist es] (http://stackoverflow.com/questions/2837263/how-do-i-get-the-directory-that-the-currently-executing-jar-file-isin-). Nicht "Sicherheit", sondern "geschützt". 'getClass(). getProtectionDomain(). getCodeSource(). getLocation()' –

Antwort

1

Wenn Sie ein Bukkit Plugin machen, können Sie getDataFolder() in der Hauptklasse verwenden. Dann können Sie prüfen, ob es existiert und dann erstellen, wenn es nicht existiert.

public void onEnable(){ 
    getLogger().info(ChatColor.GREEN + "Credits has been enabled!"); 

    File pluginDirectory = getDataFolder(); //getting the data folder 
    if(!pluginDirectory.exists()){ 
     pluginDirectory.mkdir(); //Creating the plugin data folder if it doesn't exist. 
    } 

    File file = new File(pluginDirectory+File.seperator+"Credits.txt"); //Credits.txt inside the plugin directory 

    if (file.exists()){ //Checking if Credits.txt exists 
     getLogger().info(ChatColor.DARK_GREEN + "Credits File Exists"); 

    }else{ 
     getLogger().info(ChatColor.DARK_RED + "Credits File Doesn't Exist!"); 

     file.createNewFile(); //You probably need to create it too 
    } 
} 

Wenn Sie es zum Speichern von Einstellungen erstellen möchten, sollten Sie getConfig() anstelle der Erstellung einer Datei selbst. Es ist viel einfacher.

+0

Danke! Ich könnte wieder in abit kommen, sobald ich herausgefunden habe, was genau los ist, aber ich denke, ich bekomme es jetzt :) –

+0

Danke, gerade jetzt wird ein Ordner erstellt, nachdem der Server startet und neu lädt, was großartig ist, aber dieser Ordner ist immer beim Serverstart überschrieben, erstellt es jedes Mal einen neuen Ordner –

+0

Grundsätzlich gilt diese Zeile: Wenn (! pluginDirectory.exists()) immer wahr ist, so scheint jedes Mal ein neuer Ordner angelegt zu werden ... Und die Konsole druckt "Credits Datei existiert nicht " –

Verwandte Themen