exe Kopieren

Sunchezz

Bekanntes Mitglied
Halli hallo,
es gibt ein neues Problemchen bei mir.

es ist ja möglich über Reader und Writer Dateien zu kopieren.
Daher sollte es doch auch möglich sein dies eingelesen Dateidaten zu splitten, und in splidateien zwischen zu speichern, quasi die Ursprungsdatei zu splitten.
Das habe ich gerade mit einer Exe vor.
Aus einem verkorksten Grund geht das bei mir nicht.
Liegt das an der Aufbauweise einer exe?


Schonmal herzlichsten Dank!
 

Sunchezz

Bekanntes Mitglied
Code:
while (s != null) {
  datei = new ArrayList<String>();
  for (int i = 0; i < 35000; i++) {
     s = in.getReader().readLine(); //BufferedReader
     if (s != null) {
       datei.add(s);
     }
  }
  JlsFileWriter.overwrite(new File(uploadExenFile + "\\Ordner\\" + zaehler + ".exePart"), datei);
  JlsFileWriter.add(new File(uploadExenFile + "\\" + kundenIdentifier + "\\test.exe"), datei); // das ist ja im Prinzip 
                                                                                                                              //     die wieder zusammengefügte datei
   zaehler++;
}

EDIT:
Hier noch die Methode des Writers:

Code:
public static void add(File file, ArrayList<String> content) {
    try {
      FileOutputStream fos = new FileOutputStream(file, true);
      OutputStreamWriter osw = new OutputStreamWriter(fos, Charset.forName("ISO-8859-1"));
      BufferedWriter bw = new BufferedWriter(osw);
      for (int i = 0; i < content.size(); i++) {
        bw.write(content.get(i));
        if (i != content.size()-1) {
          bw.newLine();
        }
      }
      bw.close();
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
 
Zuletzt bearbeitet:

Runtime

Top Contributor
Nimm statt eines BufferedReaders einen normalen InputStream, ein BufferedReader liest Strings ein, du brauchst aber nur Bytes. Definiere einen Buffer mit der Grösse der Datei und speichere immer nach dem einlesen des Buffers eine neue Datei.
 

Sunchezz

Bekanntes Mitglied
sollte es nicht aber auch mit Strings gehen?
im prinzip kopiere ich doch den inhalt 1 zu 1 oder??
da sind doch Strings genauso gut???

Werds mal probieren!
 

faetzminator

Gesperrter Benutzer
Für binäre Dateien - also von der exe über das pdf bis zum png oder docx - sollte man - wie bereits erwähnt - keine String-Conversions vornehmen. Da kann man gut mit einem byte[] arbeiten.
 

Sunchezz

Bekanntes Mitglied
nur nochmal zum verständnis:

wenn ich das in bytes auslese, (ich hatte es übrigens schon mit ints);
verdreifacht sich doch die gesamt größe...
so wars jedenfalls beim ersten Test.
so wurde aus einer 23MB großen exe, 110MB große Splitdateien^^

das würde ich gerne Vermeiden...

also, wenn ich das in bytes oder ints auslese, werden doch die Ascii werte genommen oder??
heist # = 32546;
so, wenn ich das nun in einer datei zwischenspeicher ist ja klar das die gesamt größe sich verXfacht...
 

Volvagia

Top Contributor
Bedenke aber, dass du so die ganze Datei einließt. Dir wird dann wohlirgendwann der RAM ausgehen.
Schau dir mal das an:

Java:
package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class Main
{
	public static void main(String[] args)
	{
		try
		{
			copyFile(new File("Y:\\copy\\Knoppix 5.1.0 - 30. 12. 2006 - Deutsch.iso"),
					new File("Y:\\copy\\target.iso"), 32 * 1024 * 1024 /*32 MB*/);
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	/**
	 * Kopiert eine Datei.
	 * @param source Die ursprüngliche Datei.
	 * @param target Die neue Dateinamenbasis. Dieser werden der Reihe nach die Extensions ".partN", also .part1,
	 * .part2 usw angehängt.
	 * @param chunkSize Die Größe der Parts. Darf keinesfalls höher als der der VM zu Verfügung gestellte RAM
	 * sein. 
	 * @throws Falls eine IOException fliegt.
	 */
	public static void copyFile(File source, File target, int chunkSize) throws IOException
	{
		String targetNameBase = target.getAbsolutePath();
		
		FileInputStream in = null;
		FileOutputStream out = null;
	
		FileChannel inChannel = null;
		FileChannel outChannel = null;
	
		try
		{
			in = new FileInputStream(source);
			inChannel = in.getChannel();
	    	
			long fileLenght = source.length();
	    	
			long bytesTransfered = 0L;
			for(int i = 1; bytesTransfered < fileLenght; i++)
			{
				long bytesToTransfer = Math.min(chunkSize, fileLenght - bytesTransfered);
				
				File realTargetFile = new File(targetNameBase + ".part" + i);
				if(!realTargetFile.exists())
					realTargetFile.createNewFile();

				try
				{
					out = new FileOutputStream(realTargetFile);
					outChannel = out.getChannel();
					
					long nowBytesTransfered = inChannel.transferTo(bytesTransfered, bytesToTransfer, outChannel);
					bytesTransfered += nowBytesTransfered;
				}
				finally
				{
					try
					{
						if(outChannel != null)
							outChannel.close();
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
			
					try
					{
						if(out != null)
						{
							out.flush();
							out.close();
						}
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
				}
			}
		}
		finally
		{
			try
			{
				if(inChannel != null)
					inChannel.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
			
			try
			{
				if(in != null)
					in.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
}

Edit: Sowas darf natürlich nicht passieren, da musst du einen schweren Fehler gemacht haben. 1 Byte ist immer 1 Byte lang, egal ob in der Start oder Zieldatei.
# ist übrigens nicht 32546, ASCII hat nur 256 Zeichen und von denen sind 127 schon alleine für Steuerzeichen reserviert. # hat Dez. 35.
 
Zuletzt bearbeitet:

Sunchezz

Bekanntes Mitglied
ok, das sieht schonmal verdammt gut aus...
Danke sehr...

dann muss ich jetzt nur noch rausfinden wie ich das wieder umdrehen kann.
Einfach das Prinzip umdrehen?
 

Volvagia

Top Contributor
Jep, finde es sogar noch einfacher.

Java:
package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.LinkedList;
import java.util.List;

public class Main
{
	public static void main(String[] args)
	{
		File source = new File("Y:\\copy\\Knoppix 5.1.0 - 30. 12. 2006 - Deutsch.iso");
		File target = new File("Y:\\copy\\target.iso");
		
		try
		{
			splitFile(source, target, 32 * 1024 * 1024);
			source.delete();
			mergeFile(target, source, true);
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	/**
	 * Kopiert eine Datei und splitted sie in mehrere Ziele auf.
	 * @param source Die ursprüngliche Datei.
	 * @param target Die neue Dateinamenbasis. Dieser werden der Reihe nach die Extensions ".partN", also .part1,
	 * .part2 usw angehängt.
	 * @param chunkSize Die Größe der Parts. Darf keinesfalls höher als der der VM zu Verfügung gestellte RAM
	 * sein. 
	 * @throws Falls eine IOException fliegt.
	 */
	public static void splitFile(File source, File target, int chunkSize) throws IOException
	{
		String targetNameBase = target.getAbsolutePath();
		
		FileInputStream in = null;
		FileChannel inChannel = null;
	
		try
		{
			in = new FileInputStream(source);
			inChannel = in.getChannel();
	    	
			long fileLenght = source.length();
	    	
			long bytesTransfered = 0L;
			for(int i = 1; bytesTransfered < fileLenght; i++)
			{
				long bytesToTransfer = Math.min(chunkSize, fileLenght - bytesTransfered);
				
				File realTargetFile = new File(targetNameBase + ".part" + i);
				if(!realTargetFile.exists())
					realTargetFile.createNewFile();

				FileOutputStream out = null;
				FileChannel outChannel = null;

				try
				{
					out = new FileOutputStream(realTargetFile);
					outChannel = out.getChannel();
					
					long nowBytesTransfered = inChannel.transferTo(bytesTransfered, bytesToTransfer, outChannel);
					bytesTransfered += nowBytesTransfered;
				}
				finally
				{
					try
					{
						if(outChannel != null)
							outChannel.close();
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
			
					try
					{
						if(out != null)
						{
							out.flush();
							out.close();
						}
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
				}
			}
		}
		finally
		{
			try
			{
				if(inChannel != null)
					inChannel.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
			
			try
			{
				if(in != null)
					in.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	/**
	 * Führt eine zuvor gesplittete Datei wieder zusammen.
	 * @param source Die Dateinamenbasis. Diese muss <b>OHNE</b> ".partN" angegeben werden. 
	 * @param target Die Datei, in die zusammengeführt werden soll.
	 * @param autoclear True, falls benutzte Parts automatisch gelöscht werden sollen, falls wenn nicht.
	 * Gelöscht wird ausschließlich, falls das Schreiben fehlerfrei ausgeführt wurde. 
	 * @throws Falls eine IOException fliegt.
	 */
	public static void mergeFile(File source, File target, boolean autoclear) throws IOException
	{
		String sourceNameBase = source.getAbsolutePath();
		
		FileOutputStream out = null;
		FileChannel outChannel = null;
	
		List<File> deleteFilesList = null;
		if(autoclear)
			deleteFilesList = new LinkedList<File>();
		
		try
		{
			if(!target.exists())
				target.createNewFile();
			
			out = new FileOutputStream(target);
			outChannel = out.getChannel();
			
			File realSourceFile = null;
			for(int i = 1; (realSourceFile = new File(sourceNameBase + ".part" + i)).exists(); i++)
			{
				FileInputStream in = null;
				FileChannel inChannel = null;

				try
				{
					int chunkSize = (int) realSourceFile.length();
					
					in = new FileInputStream(realSourceFile);
					inChannel = in.getChannel();
					
					inChannel.transferTo(0, chunkSize, outChannel);	
				}
				finally
				{
					try
					{
						if(inChannel != null)
							inChannel.close();
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
					
					try
					{
						if(in != null)
							in.close();
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
				}
				if(autoclear)
					deleteFilesList.add(realSourceFile);
			}
		}
		finally
		{
			try
			{
				if(out != null)
				{
					out.flush();
					out.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		if(autoclear)
			for(File f:deleteFilesList)
				f.delete();
	}
}
 

Sunchezz

Bekanntes Mitglied
Oookay....
DAS, ist cool :D

Nein im ernst, danke sehr!
Ich hatte es auch schon eben selbst hinbekommen, allerdings ohne diesen Channel kram, das hatt ich noch nie gesehn, bzw. mich nich mit beschäftigt, bei mir hats auch geklappt, allerdings hat er fürs zusammenfügen ca. 4 Minuten gebraucht.
mit deiner Methode gehts unter einer Sekunde!
Keine Ahnung warum, aber wenns recht is, ist es mir momentan egal!
Setz ich mich später mal mit auseinander...

Darf ich das so benutzen?
Nur um mal höflich zu fragen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Ordner kopieren Allgemeine Java-Themen 5
S Referenzdatentyp kopieren Allgemeine Java-Themen 5
I Wie Vektor-Grafik in die Zwischenablage kopieren? Allgemeine Java-Themen 2
J Gebautes Jar per Maven in einen Docker Container kopieren Allgemeine Java-Themen 0
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
B In zwischenablage kopieren Allgemeine Java-Themen 2
F Datentypen Kopieren von Datentypen Allgemeine Java-Themen 10
K JAR Datei Corrupt nach Kopieren Allgemeine Java-Themen 4
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
N String ins Clipboard kopieren ohne makieren. Allgemeine Java-Themen 12
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
F Java moved Files statt sie zu kopieren Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
J PDF-Datei aus JAR-Archiv in Dateisystem kopieren Allgemeine Java-Themen 1
S Einen übergebenen String kopieren Allgemeine Java-Themen 3
S in Zip kopieren -- Backup-Programm Allgemeine Java-Themen 9
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
J Bilder halb in falscher Farbe nach kopieren aus Web Allgemeine Java-Themen 3
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
Todesbote Zeilen aus Excel in andere Excel Tabelle kopieren Allgemeine Java-Themen 0
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P jar aus der jar kopieren XD Allgemeine Java-Themen 4
M Pakete in Ordner Kopieren Allgemeine Java-Themen 7
D File mit Inhalt kopieren und dieses File dann neu erstellen ? Allgemeine Java-Themen 4
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
H Kopieren sehr langsam Allgemeine Java-Themen 5
I Java Ordner kopieren [Error] Allgemeine Java-Themen 6
E Files Kopieren Allgemeine Java-Themen 8
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
E Ordner rekursiv kopieren Allgemeine Java-Themen 8
J Standard-I´/O kopieren Allgemeine Java-Themen 5
R kopieren von Dateien und Verzeichnissen - UNICODE? Allgemeine Java-Themen 4
S Kopieren von Datei führt zu Beschädigung Allgemeine Java-Themen 7
D markierten Text kopieren Allgemeine Java-Themen 2
O ist tiefes Kopieren sinnvoll? Allgemeine Java-Themen 14
B Zertifikat des Users speichern (serialisieren oder kopieren) Allgemeine Java-Themen 2
S Dateiinhalt kopieren Allgemeine Java-Themen 4
G Object mit clone kopieren Allgemeine Java-Themen 21
F Kopieren eines Objekts Allgemeine Java-Themen 3
D Kopieren und Einfügen Allgemeine Java-Themen 8
C Kopieren von Dateien die von einem anderen Programm verwendet werden? Allgemeine Java-Themen 7
E Blob Element kopieren Allgemeine Java-Themen 12
0din Websites kopieren Allgemeine Java-Themen 25
D mit java kopieren und umbenennen Allgemeine Java-Themen 6
X Objektsammlung clonen bzw. kopieren Allgemeine Java-Themen 5
A Beim Kopieren werden Bilder verfälscht Allgemeine Java-Themen 3
V Dateien kopieren Allgemeine Java-Themen 6
N Daten auf Server kopieren Allgemeine Java-Themen 6
Q Iterator kopieren Allgemeine Java-Themen 6
M Wie in Eclipse Quellcode incl. Zeilennummern kopieren? Allgemeine Java-Themen 6
G Daten von Excel kopieren - sinnvolle Datenstruktur? Allgemeine Java-Themen 3
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
J Externes Programm - Konsolenausgabe kopieren/sichtbar machen Allgemeine Java-Themen 22
C File in Jar kopieren? Allgemeine Java-Themen 9
G ANT und Verzeichnisstruktur kopieren Allgemeine Java-Themen 2
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
R Dateien lokal kopieren Allgemeine Java-Themen 6
P Objekt kopieren Allgemeine Java-Themen 8
hdi ArrayList kopieren? Allgemeine Java-Themen 8
G Datei kopieren Allgemeine Java-Themen 27
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
I Teile von ArrayList in eine andere kopieren? Allgemeine Java-Themen 2
V Datei kopieren und Datum erhalten Allgemeine Java-Themen 2
V Sich selbst kopieren (Jar- Datei) Allgemeine Java-Themen 3
G Code mit Zeilennummern kopieren? Allgemeine Java-Themen 3
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
M variable übergeben NICHT KOPIEREN Allgemeine Java-Themen 12
P String in Array kopieren Allgemeine Java-Themen 3
S Dateien auf Diskette kopieren Allgemeine Java-Themen 3
M Datei kopieren? Allgemeine Java-Themen 2
MQue Array in ein anderes Array kopieren Allgemeine Java-Themen 5
D aufruf beim kopieren Allgemeine Java-Themen 11
G Objekt dynamisch erstellen und Inhalte kopieren Allgemeine Java-Themen 6
K Datei kopieren Allgemeine Java-Themen 2
M 2-dimensionalen array schnell kopieren Allgemeine Java-Themen 6
T Text aus Java-Applet kopieren. Allgemeine Java-Themen 14
TheJavaKid Textformatierung bei Kopieren übernehmen Allgemeine Java-Themen 8
P Mehrzeiligen Text aus JTA lesen und in andere JTA kopieren Allgemeine Java-Themen 7
S Objekte kopieren Allgemeine Java-Themen 6
W Dateien über Clipboard kopieren Allgemeine Java-Themen 2
G InputStream kopieren? Allgemeine Java-Themen 6
G In Windows Datei kopieren Allgemeine Java-Themen 2
G Text aus Chatfenster kopieren Allgemeine Java-Themen 7
M Cache & Datein kopieren Allgemeine Java-Themen 3
R Problem bei Kopieren eines Ordners Allgemeine Java-Themen 13
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
m@nu Kopieren beschleunigen Allgemeine Java-Themen 3
T Musikdateien von CD Kopieren Allgemeine Java-Themen 4
M Bild in Zwischenablage kopieren? Allgemeine Java-Themen 7
bernd Problem beim kopieren! Allgemeine Java-Themen 2
G Dateien werden beim Kopieren zerstört Allgemeine Java-Themen 4
N Schnellste Art Dateien zu kopieren Allgemeine Java-Themen 16
U Dateien kopieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben