G
Guest
Gast
Hallo,
wie verschiebe ich performant eine Datei in Java?
Ich habe es aktuell so gemacht:
Das "synchronized" benötige ich, da es in einer Multithreaded-Umgegebung abläuft.
So nun funktioniert das auch ganz gut und performant, wenn die Applikation und die Verzeichnisse auf dem selben Rechner liegen.
Sind die Verzeichnisse aber auf einem anderen Rechner und es wird über das Netzwerk (Windows) darauf zugegriffen, bricht die Performanz massiv ein.
Daraufhin habe ich versucht obigen Move mit Java.nio zu machen:
Aber das brachte keine Besserung.
Nun:
Wie kann ich das Performanzproblem (bei Zugriffen über Netzwerkfreigaben) lösen?
Viele Grüsse
Thomas
wie verschiebe ich performant eine Datei in Java?
Ich habe es aktuell so gemacht:
Code:
public synchronized boolean moveFile(String filename, String targetDirectory) {
File file = new File(filename);
File dir = new File(targetDirectory);
return file.renameTo(new File(dir, file.getName()));
}
Das "synchronized" benötige ich, da es in einer Multithreaded-Umgegebung abläuft.
So nun funktioniert das auch ganz gut und performant, wenn die Applikation und die Verzeichnisse auf dem selben Rechner liegen.
Sind die Verzeichnisse aber auf einem anderen Rechner und es wird über das Netzwerk (Windows) darauf zugegriffen, bricht die Performanz massiv ein.
Daraufhin habe ich versucht obigen Move mit Java.nio zu machen:
Code:
public synchronized boolean transferFile(File srcFile, File destFile) throws IOException {
boolean bRet = false;
FileChannel srcChannel = null;
FileChannel destChannel = null;
try {
srcChannel = new FileInputStream(srcFile).getChannel();
destChannel = new FileOutputStream(destFile).getChannel();
destChannel.transferFrom(srcChannel, 0, srcChannel.size());
srcFile.delete();
bRet = true;
} catch (IOException ex) {
Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (srcChannel != null) {
srcChannel.close();
}
if (destChannel != null) {
destChannel.close();
}
}
return bRet;
}
Nun:
Wie kann ich das Performanzproblem (bei Zugriffen über Netzwerkfreigaben) lösen?
Viele Grüsse
Thomas