Schnell große Dateien kopieren mit Java NIO

Hallo Leute,

das sind ja echt gute Tutorials aber wie kann ich denn mittels NIO Dateien übers Netzwerk mittels Channel kopieren? Da hänge ich irgendwie fest.
 
Hallo Leute,

das sind ja echt gute Tutorials aber wie kann ich denn mittels NIO Dateien übers Netzwerk mittels Channel kopieren? Da hänge ich irgendwie fest.

Lösung 1 : Du könntest mit JSCh einen SSH-Tunnel aufbauen und java-scp machen. Nachteil : Hierzu benötigst Du einen SSH-Server und einen Account auf selbigem
Lösung 2 : Du kannst mit JCIFS das Zeug auf einen netzwerk-Mountpoint hochladen (Benötigt aber SAMBA, WEBDAV o.ä)
Lösung 3 : Du schreibst einen RMI-Server der das Zeug annimmt und serialisierst die Chunks dahin (Benötigt einen RMI-Server)

Grüße
gore
 
Ersteinmal wollte ich mich für den Thread bedanken, es klappt wirklich 1A und ist wesendlich schneller als die methoden die ich vorher hatte...
Eine kleine Frage noch, wie kann ich das nun in Verbindung mit einer progress bar bringen? Sodass es noch ein bisschen schöner ausschaut. Ich hab das leider nicht hinbekommen...
 
Coke_, einen ProgressBar könnt ich dir anbieten. Hab den in die transfer-Methode von Thomas "reingepfropft", da er in dieser Methode alle Parameter, die für einen ProgressMonitor nötig sind, übergibt.
Was mich auch wiederum gleich zu einer Frage meinerseits, an die Profis, bringt: Dieses "reinstöpseln" eines ProgressMonitors in diese Methode scheint mir ziemlich dirty. Könntet ihr mir da Empfehlungen bzw. Tipps geben wie man das sauber hinkriegt.
Davon würden Coke(wenn er hier noch aktiv mitliest) u. meine Wenigkeit sehr profitieren.
Code:
	public static void transfer(FileChannel inputChannel, ByteChannel outputChannel,
	    long lengthInBytes, long chunckSizeInBytes, boolean verbose) throws IOException
	{
		progMonitor = new ProgressMonitor(null, "Kopiere " + src.getName(), "Kopiert... ", 0, 100);
		long overallBytesTransfered = 0L;
		while (overallBytesTransfered < lengthInBytes && verbose)
		{
			long bytesToTransfer = Math.min(chunckSizeInBytes, lengthInBytes - overallBytesTransfered);
			long bytesTransfered = inputChannel.transferTo(overallBytesTransfered, bytesToTransfer,
			    outputChannel);

			overallBytesTransfered += bytesTransfered;
			double megabyte = overallBytesTransfered / 1048576;
			if (verbose && progMonitor != null)
			{
				long percentageOfOverallBytesTransfered = Math.round(overallBytesTransfered / ((double) lengthInBytes) * 100.0);
				progMonitor.setNote("<html>Fortschritt: " + percentageOfOverallBytesTransfered + " %<br>"
				    + "MB übertragen: " + megabyte);
				progMonitor.setProgress((int) percentageOfOverallBytesTransfered);
				// createlogfile("overall bytes transfered: " +
				// overallBytesTransfered +
				// "\tPercent transferred " + percentageOfOverallBytesTransfered + "%");
			}
		}
		if (progMonitor != null)
		{
			progMonitor.close();
		}
		progMonitor = null;

	}

Danke im Voraus, für eure Empfehlungen bzw. Tipps.
 
Hallo liebe Community,
ich bin noch ein ziemlicher Java Anfänger und begreife nicht wie man den Code von Adi_M in den von Thomas einbinden kann. Ich bastle gerade an einem Installer und könnte dies daher sehr gut gebrauchen.
Thx
 
Für solche Zwecke würde ich einen Listener verwenden, der die Werte immer wieder übergeben bekommt. In dessen wird dann die ProgressBar jedes Mal aktualisiert. Bei Swing z.B. kann man das dann klever asynchron erledigen lassen: SwingUtilities.invokeLater(...)
 

Neue Beiträge

Zurück