<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Der Informatikblog &#187; checky4fun</title>
	<atom:link href="http://www.informatik-blog.net/author/julian/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.informatik-blog.net</link>
	<description>Informatik &#38; Co.</description>
	<lastBuildDate>Mon, 19 Dec 2011 13:01:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Dateien verschieben, kopieren</title>
		<link>http://www.informatik-blog.net/2009/04/20/dateien-verschieben-kopieren/</link>
		<comments>http://www.informatik-blog.net/2009/04/20/dateien-verschieben-kopieren/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 19:26:37 +0000</pubDate>
		<dc:creator>checky4fun</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[copy File]]></category>
		<category><![CDATA[Dateien kopieren]]></category>
		<category><![CDATA[Dateien verschieben]]></category>
		<category><![CDATA[fileChannel]]></category>
		<category><![CDATA[FileInputStream]]></category>
		<category><![CDATA[FileOutputStream]]></category>
		<category><![CDATA[move File]]></category>
		<category><![CDATA[NIO]]></category>
		<category><![CDATA[transferTo]]></category>

		<guid isPermaLink="false">http://www.informatik-blog.net/?p=552</guid>
		<description><![CDATA[Dateien verschieben Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so: try { File quellDatei = new File(&#34;/meine/quelledatei.txt&#34;); File zielDatei = new File(&#34;/meine/zieldatei.txt&#34;); quellDatei.renameTo(zielDatei); } catch (Exception e) { e.printStackTrace(); } _______________________________ Dateien kopieren Anders schaut es mit Kopieren von Dateien in andere Ordner aus. Hier hat man zwar mehrere Möglichkeiten der [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><strong>Dateien verschieben</strong></p>
<p>Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so:</p>
<pre class="brush: java; title: ;">
try {
File quellDatei = new File(&quot;/meine/quelledatei.txt&quot;);
File zielDatei = new File(&quot;/meine/zieldatei.txt&quot;);
quellDatei.renameTo(zielDatei);
} catch (Exception e) {
e.printStackTrace();
}
</pre>
<p>_______________________________</p>
<p><strong>Dateien kopieren</strong></p>
<p>Anders schaut es mit Kopieren von Dateien in andere Ordner aus. Hier hat man zwar mehrere Möglichkeiten der Umsetzung, es ist aber auch mit mehr Schreibaufwand verbunden.</p>
<p>Byteweise Einlesen macht in den wenigsten fällen Sinn, es kommt meistens ein Buffer zum Einsatz.<br />
Ein Beispiel findet man hier: <a href="http://www.tutorials.de/forum/java/153779-dateien-kopieren.html" target="_blank">http://www.tutorials.de/forum/java/153779-dateien-kopieren.html</a></p>
<p>Eine performantere Lösung wäre natürlich über System.exec(…) Batch-Befehle per Java abzusetzen, man verspielt dabei aber den Vorteil der Plattformunabhängigkeit.</p>
<p>Eine echte Alternative zu Batch bieten die java.nio Klassen. Kopierprozesse per NIO über
<pre class="brush: java; title: ;">transfer(inputChannel, outputChannel,...)</pre>
<p> kann vom Betriebssystem (falls es das unterstützt) noch intern optimiert werden und kommen damit sehr nah an die Geschwindigkeit von Batchverarbeitung ran.</p>
<p>Hier ein Beispiel einer universellen FileCopy Klasse:</p>
<pre class="brush: java; title: ;">
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.ByteChannel;
import java.nio.channels.FileChannel;
public class FileCopy {
long chunckSizeInBytes;
boolean verbose;
public FileCopy(){
this.chunckSizeInBytes = 1024 * 1024; //Standard: Buffer 1MB
this.verbose = false; //Statistics about Copy Process
}
public FileCopy(boolean verbose){
this.chunckSizeInBytes = 1024 * 1024; //Standard: Buffer 1MB
this.verbose = verbose; //Statistics about Copy Process
}
public FileCopy(long chunckSizeInBytes){
this.chunckSizeInBytes = chunckSizeInBytes; //Custom Buffer (Bytes)
this.verbose = false; //Statistics about Copy Process
}
public FileCopy(long chunckSizeInBytes, boolean verbose){
this.chunckSizeInBytes = chunckSizeInBytes; //Custom Buffer (Bytes)
this.verbose = verbose; //Statistics about Copy Process
}
public void copy(File source, File destination) {
try {
FileInputStream fileInputStream = new FileInputStream(source);
FileOutputStream fileOutputStream = new FileOutputStream(destination);
FileChannel inputChannel = fileInputStream.getChannel();
FileChannel outputChannel = fileOutputStream.getChannel();
transfer(inputChannel, outputChannel, source.length(), false);
fileInputStream.close();
fileOutputStream.close();
destination.setLastModified(source.lastModified());
} catch (Exception e) {
e.printStackTrace();
}
}
public void transfer(FileChannel fileChannel, ByteChannel byteChannel, long lengthInBytes, boolean verbose)
throws IOException {
long overallBytesTransfered = 0L;
long time = -System.currentTimeMillis();
while (overallBytesTransfered &lt; lengthInBytes) {
long bytesTransfered = 0L;
bytesTransfered = fileChannel.transferTo(overallBytesTransfered, Math.min(chunckSizeInBytes, lengthInBytes - overallBytesTransfered), byteChannel);
overallBytesTransfered += bytesTransfered;
if (verbose) {
System.out.println(&quot;overall bytes transfered: &quot; + overallBytesTransfered + &quot; progress &quot; + (Math.round(overallBytesTransfered / ((double) lengthInBytes) * 100.0)) + &quot;%&quot;);
}
}
time += System.currentTimeMillis();
if (verbose) {
System.out.println(&quot;Transfered: &quot; + overallBytesTransfered + &quot; bytes in: &quot; + (time / 1000) + &quot; s -&gt; &quot; + (overallBytesTransfered / 1024.0) / (time / 1000.0) + &quot; kbytes/s&quot;);
}
}
}
</pre>
<p>Zu beachten ist dabei, dass der Zielordner schon zur Laufzeit bestehen muss beziehungsweise vorher erstellt wird.</p>
<p>Das NIO Beispiel stammt von folgender Seite:<br />
<a href="http://www.tutorials.de/forum/java/328830-schnell-grosse-dateien-kopieren-mit-java-nio.html" target="_blank">http://www.tutorials.de/forum/java/328830-schnell-grosse-dateien-kopieren-mit-java-nio.html</a><br />
Es wurde allerdings noch etwas umgeschrieben, dass es als universelle Klasse dient. Außerdem wurde ein Fehler in der Bufferbearbeitung behoben, daher ist von der Verwendung des Originals abzuraten.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.informatik-blog.net/2009/04/20/dateien-verschieben-kopieren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

