jar aus der jar kopieren XD

pcProfie

Aktives Mitglied
moin

ich mach ein programm das ein anderes programm in den autorun verschiebt.
dieses programm möchte ich gerne in der jar haben.
ich hab schon einiges über classloader gefunden, aber wie man das hier anwendet...
hier mein erster code:
Java:
//unter mir
Path quelle = Paths.get(new File("Autostarter.jar").getAbsolutePath());
//über mir
Path ziel = Paths.get("C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start       
                                                                  Menu/Programs/Startup/Autostarter.jar");
try {
    Files.copy(quelle, ziel);
} catch (IOException e) {
    e.printStackTrace();
}
die datei ist in diesem fall im glechem verzeichnis wie die installations-datei
nochma:
2 files
1) installationsfile, zb. install.jar
darin der quelltext der oben steht
2) programm das im autostart liegen soll, Autostarter.jar

also das problem ist, dass ich nicht darauf zugreifen kann wenn es in der anderen datei ist:
Autostarter.jar ist im install.jar archiv drin

danke schonmal
 
Ein jar File ist ein normales zip File.
Du musst die enthaltene also nicht rauskopieren, sondern entpacken. Java stellt schon einige Zip Klassen bereit, die dir helfen könnten.
 
hier kann ich schonmal den namen bzw. den pfad meiner install.jar datei auslesen:
Java:
File a = new File(System.getProperty("java.class.path"));
//hiermit den pfad
a.getAbsolutePath();
//hiermit den namen
a.getName();
daraus folgt sowas wie
Java:
.. = new ZipFile(a.getName());
bzw. das andere
bei nem out-print gibt er mir dann den namen egal wie die jar dann heißt
jetzt muss ich da irgendwie die ZipFile nehmen und dann irgendwie was mit irgendwem machen
 
ok
will niemand antworten...
aber danke trotzdem ich habs jetzt
Java:
	public void extractArchive(File archive, File destDir) throws Exception {
		if (!destDir.exists()) {
			destDir.mkdir();
		}

		ZipFile zipFile = new ZipFile(archive);
		Enumeration entries = zipFile.entries();

		byte[] buffer = new byte[16384];
		int len;
		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();

			String entryFileName = entry.getName();
			System.out.println(entry.getName());
			if (entry.getName().equals("Autostarter.jar")) {

				File dir = dir = buildDirectoryHierarchyFor(entryFileName,
						destDir);
				if (!dir.exists()) {
					dir.mkdirs();
				}

				if (!entry.isDirectory()) {
					BufferedOutputStream bos = new BufferedOutputStream(
							new FileOutputStream(new File(destDir,
									entryFileName)));

					BufferedInputStream bis = new BufferedInputStream(
							zipFile.getInputStream(entry));

					while ((len = bis.read(buffer)) > 0) {
						bos.write(buffer, 0, len);
					}

					bos.flush();
					bos.close();
					bis.close();
				}
			}
		}
		zipFile.close();
	}

	private File buildDirectoryHierarchyFor(String entryName, File destDir) {
		int lastIndex = entryName.lastIndexOf('/');
		String entryFileName = entryName.substring(lastIndex + 1);
		String internalPathToEntry = entryName.substring(0, lastIndex + 1);
		return new File(destDir, internalPathToEntry);
	}
als neue methoden und
Java:
File a = new File(System.getProperty("java.class.path"));

		text = text + "\n " + a.getName();
		area.setText(text);
		File zz = new File(".");
		try {
			text = text + "\n "+zz.getAbsolutePath();
			area.setText(text);
			v.extractArchive(new File("Autostarter.jar"), zz);
					
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		 Path quelle = Paths.get(a.getName());

		Path ziel = Paths
				.get("C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/Autostarter.jar");

		try {
			Files.copy(quelle, ziel);
			text = text + "\n + Autostarter.jar kopiert";
			area.setText(text);
		} catch (Exception e) {
			text = text
					+ "\n - Fehler. Autostarter.jar konnte nicht kopiert werden";
			area.setText(text);
		} finally {
			try {
				Thread.sleep(3000);
			} catch (Exception e) {
			}
			System.exit(0);
		}
 

Neue Themen


Zurück
Oben