Wie wird eine java Application richtig für ein jar-Archiv vorbereitet?

pame

Grünschnabel
Wie ich hörte kann man nicht direkt ins Jar-Archiv neue Dateien speichern. Deshalb will ich in mein Programm eine Install-Routine eingebauen die alle Resourcen, die durch das Programm geändert und erweitert werden sollen, auslagert. Irgendwie kommt mir das ziemlich geflickt vor. Weiß jemand eine bessere Lösung?

Hier meine beabsichtigte Vorgehensweise:
Verzeichnisstruktur in eclipse:
Code:
Project
   |
   |-- src
   |-- SerSources
   |-- sounds
   |-- img
   |-- text

Werden die Dirs in eclipse als Sourcefolder definiert, wandern sie zusammen mit dem Code ins bin-Verzeichnis und damit sind (so meine Annahme) alle classfiles und Resourcen im jar auf einer Hierachieebene.

Den img-Folder mach ich in eclipse zum package im src und lade die Bilder mit

Java:
URL url = getClass().getClassLoader().getResource("/img/"+imgName);
img = new ImageIcon(url);

Für die anderen Resourcen nutze ich eine Installerklasse ( Unschön: Bei jedem Programmstart rufe ich ein persistentes Objekt auf, das mir sagt, ob installiert werden muss oder nicht):

Java:
public class Installer{

    public Installer(){
        File file=new File(foo.jar);
        String sep=System.getProperty("file.separator");
            String jarDatei=file.getAbsolutePath();
            workspace=workspace.substring(0,jarDatei.lastIndexOf(sep)+1);
            File daten=new File(workspace+sep+"SerSources");
            File wav=new File(workspace+sep+"sounds");
            File text=new File(workspace+sep+"text");
            if(!daten.exists())daten.mkdir();
            if(!wav.exists())wav.mkdir();
            if(!text.exists())text.mkdir();
        String[] allFiles=jarDatei.list();
        for(String str:allFiles){
            File quelldatei= new File(str);
            if(str.endsWith(".ser")){
                File zieldatei = new File(workspace+"SerSources"+sep+str);
                quelldatei.renameTo(zieldatei);
            }else if(str.endsWith(".wav")){
                File zieldatei = new File(workspace+"sounds"+sep+str);
                quelldatei.renameTo(zieldatei);
            }else if(str.endsWith(".txt")){
                File zieldatei = new  File(workspace+"text"+sep+str);
                quelldatei.renameTo(zieldatei);
            }
        }
    }   
}
(weiß leider nicht, wie ich den code formatiert kriege)
 
Zuletzt bearbeitet von einem Moderator:
Zurück