Jar-Datei splitten

R

R3s1stanc3

Gast
Hi
ich spiele zZ ein bisschen mit Java rum und möchte eine Jar-Datei splitten.
Ich habe davor 2 mal das selbe hallo_welt Programm durch einen Splitstring getrennt aneinander gehängt. Dazu der Code:
Java:
public void combineFiles ( String file1, String file2, String output, String split )
{
        
    try
    {
        RandomAccessFile data1 = new RandomAccessFile ( file1, "r" ) ;
        RandomAccessFile data2 = new RandomAccessFile ( file2, "r" ) ;
        
        byte [ ] byte1 = new byte [ ( int ) data1.length ( ) ] ;
        byte [ ] byte2 = new byte [ ( int ) data2.length ( ) ] ;
        byte [ ] splitBytes = new byte [ split . length ( ) ] ;
        byte [ ] both = new byte [ split . length ( ) + byte1 . length + byte2 . length ] ;
        
        splitBytes = split . getBytes ( ) ;
        
        data1.read ( byte1 ) ;
        data2.read ( byte2 ) ;
        data1.close ( ) ;
        data2.close ( ) ;
        
        both = concat ( byte1, splitBytes, byte2 ) ;
        
        RandomAccessFile newFile = new RandomAccessFile ( output, "rw" ) ;
        newFile . write ( both ) ;
        newFile . close ( ) ;
    }
    catch ( Exception e ) { }
    
}
    
public byte [ ] concat ( byte [ ] A, byte [ ] B, byte [ ] C ) 
{
    
    byte [ ] D = new byte [ A . length + B . length + C . length ] ;
    System . arraycopy ( A, 0, D, 0, A . length ) ;
    System . arraycopy ( B, 0, D, A . length, B . length ) ;
    System . arraycopy ( C, 0, D, A . length + B . length, C . length ) ;
    return D ;
    
}
Das hat super funktioniert. Ich habe dannach eine Datei, die ich immer noch ausführen kann (das erste hallo_welt Programm wird ausgeführt) und die Dateigröße stimmt auch (datei1+datei2+splitString)

Jetzt will ich mithilfe von split() die beiden ursprünglichen Dateien wieder herstellen:
Java:
public String [ ] getOldFile ( String file, String splitStr )
{
    
    try
    {
        StringBuffer fileData = new StringBuffer ( 1000 ) ;
        BufferedReader reader = new BufferedReader ( new FileReader ( file ) ) ;
        char [ ] buf = new char [ 1024 ] ;
        int numRead = 0 ;
        while ( ( numRead = reader . read ( buf ) ) != -1 )
        {
            String readData = String . valueOf ( buf, 0, numRead ) ;
            fileData . append ( readData ) ;
            buf = new char [ 1024 ] ;
        }
        reader.close();
        
        String data = fileData . toString ( ) ;
        String [ ] splited ;
        splited = data . split ( splitStr ) ;
        return splited ;
        
    }
    catch ( Exception e ) { return null ; }
    
}
Und die beiden Felder des String Arrays wieder in 2 neue Dateien schreiben:
Java:
public void writeFile ( String fi, String data )
{
    
    try
    {
        File file = new File ( fi ) ;
        FileWriter fw = new FileWriter ( file ) ;
        fw . write ( data ) ;
        fw . flush ( ) ;
        fw . close ( ) ;
    }
    catch ( Exception e ) { }
    
}

Die beiden neuen Dateien sind aber größer als die beiden ursprünglichen Dateien und lassen sich nicht mehr ausführen:
Code:
invalid file (bad magic number): Exec format error

Dateigrößen:
hallo_welt1.jar: 17362 byte
hallo_welt2.jar: 17362 byte
splitString: 1234567890 entspricht 10 byte
hallo_welt12.jar (beide zusammen): 34734 byte <- lässt sich problemlos ausführen
Nach dem Splitten:
file0.jar: 29473 byte
file1.jar: 29473 byte

er erkennt also den SplitString und splittet auch in 2 gleich große Dateien. Diese sind aber nicht mehr die ursprünglichen Dateien.
Woran könnte das liegen?
 
R

R3s1stanc3

Gast
Hab die Lösung:
Java:
    public byte[][] getOldFile2(String file, String splitStr) {		
		try {
			FileInputStream fis = new FileInputStream(file);
			byte[] dataByte = new byte[(int) (new File(file)).length()];
			fis.read(dataByte);
			fis.close();
			
			byte[] splitByte = splitStr.getBytes();
			
			int splitPos = -1;
			
			for(int i = 0; i < dataByte.length - splitByte.length;i++){
				for (int j = 0; j < splitByte.length; j++) {
					if (dataByte[i+j] != splitByte[j]) {
						break;
					}
					if (j == splitByte.length-1) {
						splitPos = i;					
					}
				}
				if(splitPos != -1){
					break;
				}
			}
			byte[] rByte1 = new byte[splitPos];
			byte[] rByte2 = new byte[dataByte.length - splitPos - splitByte.length];
			System.arraycopy(dataByte, 0, rByte1, 0, rByte1.length);
			System.arraycopy(dataByte, splitPos + splitByte.length, rByte2, 0, rByte2.length);
			
			byte[][] returnByte = {rByte1,rByte2};
			
			return returnByte;
		} catch (Exception e) {
			return null;
		}
	}

	public void writeFile2(String fi, byte[] data) {
		try {
	        FileOutputStream output = new FileOutputStream(fi);
	        output.write(data, 0, data.length);
	        output.flush();
	        output.close();			
		} catch (Exception e) {
		}
	}

So funktioniert es problemlos
(Sry für den Doppelpost)
 
F

FileEncoding

Gast
Hast du auch wenigstens gelernt warum das eine geht und das andere nicht ?

Als Tipp : die Reader/Writer Klassen sowie String sind nur für darstellbare Zeichen
Wenn du also Binärdateien damit bearbeiten willst kommt es zwangsläufig bei der Umwandlung byte > String > byte zu Charset-Encoding-Fehlern. Darum MUSS man für Binärdaten auch mit RAW-Streams und Byte-Arrays verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Pdf Datei splitten Allgemeine Java-Themen 4
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Jar-Datei ausführen Allgemeine Java-Themen 7
C Outlook msg-Datei Anhänge extrahieren Allgemeine Java-Themen 2
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
G Datei senden via Xmodem an Serial-Port Allgemeine Java-Themen 35
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
N Txt Datei auslesen. Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
F Datei in String-Array einlesen Allgemeine Java-Themen 8
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
D ODS.Datei öffnet leider in Excel Allgemeine Java-Themen 3
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
D .txt Datei in .jar Datei speichern Allgemeine Java-Themen 3
ralfb1105 Blöcke aus Datei filtern/suchen und in neue Datei schreiben Allgemeine Java-Themen 10
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
L SQL Datei in Eclipse erstellen Allgemeine Java-Themen 3
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
Trèfle Excel-Datei nicht speicherbar, da von Java zum Bearbeiten gesperrt. Allgemeine Java-Themen 3
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
G Workupload datei mit Java Downloaden Allgemeine Java-Themen 6
H .jar Datei startet nicht richtig bei Doppelklick Allgemeine Java-Themen 11
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
M Java Eclipse- Datei exportieren Allgemeine Java-Themen 5
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
R .txt Datei einlesen und auf der Konsole ausgeben lassen Allgemeine Java-Themen 11
T Jar Datei nicht ausführbar Allgemeine Java-Themen 6
H jar-Datei mit java.exe anstatt mit javaw.exe ausführen Allgemeine Java-Themen 9
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
A Steuerung von Spiel aus Datei lesen Allgemeine Java-Themen 0
Javafan01 .sh datei in Java ausführen Allgemeine Java-Themen 1
MiMa Speichern von Programmeinstellungen in Datei Allgemeine Java-Themen 7
J Ordner und Datei Struktur einer War Datei Allgemeine Java-Themen 1
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
L Weg um Datei zuzuordnen? Allgemeine Java-Themen 3
MiMa Datei kann nicht umbenannt oder verschoben werden ?? Allgemeine Java-Themen 17
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
Aruetiise " in Datei schreiben Allgemeine Java-Themen 2
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
The Pi NetBeans Bilder in Jar Datei werden nicht angezeigt Allgemeine Java-Themen 7
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben