<?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, 28 Jun 2010 19:43:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 Umsetzung, es ist aber auch mit mehr Schreibaufwand verbunden.
Byteweise Einlesen macht [...]]]></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;">
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;">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;">
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>0</slash:comments>
		</item>
	</channel>
</rss>
