Bei einem Projekt wird die meiste Zeit kopiert oder verschoben. Das Programm läuft schon mal seine fünf Stunden, daher wollte ich mal nachfragen, ob die von mir verwendeten Java-Befehle noch aktuell sind, oder es ggf. schon schnellere gibt.
Während das Kopieren auf unterschiedlichen Speichermedien stattfindet, wird auf der gleichen Platte verschoben, daher müsste das eigentlich sehr schnell gehen. Den Eindruck habe ich bisher nicht. Es ist zwar schneller als das Kopieren, aber nicht signifikant.
Genaue Messungen habe ich noch nicht vorgenommen, das müsste ich vermutlich tun, um aussagekräftige Hinweise zu haben, wo die Zeit verbraten wird.
Ich verwende zum Kopieren und Verschieben die Klassen aus java.nio.file
:
public static void copyFile(String source, String target) {
Path sourcePath = Paths.get(source);
Path targetPath = Paths.get(target);
try {
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
}
catch (IOException exception) {
// Fehlerbehandlung hier, die ist für die Frage ja unwichtig.
}
}
public static void moveFile(String source, String target) {
Path sourcePath = Paths.get(source);
Path targetPath = Paths.get(target);
try {
Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
}
catch (IOException exception) {
// Fehlerbehandlung hier, die ist für die Frage ja unwichtig.
}
}
Ferner bearbeite ich zwischendurch noch Dateien, die werden so bearbeitet (ohne Behandlung der Ausnahmen, die ich sehr wohl mache, hier aber der Übersichtlichkeit halber weglasse).
Schreiben:
public static final String LINE_BREAK = System.getProperty("line.separator")
// Öffnen des Writers:
String charset = "ISO-8859-1";
boolean append = true; // oder halt false
OutputStream outputStream = new FileOutputStream(fileName, append);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset)
// Schreiben ganzer Zeilen:
writer.write(text + LINE_BREAK);
// Schließen:
writer.close();
Lesen:
// Öffnen des Readers:
String charset = "ISO-8859-1";
InputStream inputStream = new FileInputStream(fileName);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);
LineNumberReader lineReader = new LineNumberReader(inputStreamReader);
//Lesen einer Zeile:
lineReader.readLine();
// Schließen:
lineReader.close();
Das ganze ist auch hübsch gekapselt in eigenen Klassen, aber auch das lasse ich hier der Übersichtlichkeit halber weg.
Das funktioniert alles wie es soll, die Frage ist nur, kann ich eventuell durch Benutzen anderer Klassen Zeit sparen?