Wie lese ich in Java eine mp4-Datei ein und speichere sie an anderer Stelle?
Folgendes Problem: Ich arbeite derzeit an einem Geburtstagsgeschenk für einen Freund. Dafür schreibe ich ein kleines Programm, in dem eigentlich auch ein Video zum Abschluss gezeigt werden sollte. Da Java und Videos nicht unbedingt die beste kombi ist, zumindest habe ich es nicht hinbekommen das Video nativ in einem JFrame abspielen zu können, wollte ich dem Geburtstagskind die Möglichkeit bieten, das Video an einen selbst wählbaren Ort zu speichern.
Dazu öffnet sich zu gegebenem Zeitpunkt ein JFileChooser Fenster. Meine Frage ist jetzt aber, wie ich das Video, dass im Resource Ordner liegt, in eine Datei bekomme, die ich dann wiederum mit dem JFileChooser woanders ablegen kann? Am Ende soll das ganze schließlich ohne IDE funktionieren, also wenn ich später nur noch die JAR habe.
Vielen Dank für eure Hilfe schon einmal im voraus.
LG
3 Antworten
Z.b. indem du das Video im Workingdirectory der Anwendung ablegst und dann auch so wieder einbindest.
Da wirds sicherlich auch Bibliotheken für geben. Ich würde an deiner Stelle lieber externe Tools für die Wiedergabe einbinden, z.b. mit Java Media Framework
Von der Wiedergabe hab ich mich jetzt sowieso verabschiedet. Ich möchte nur, dass das Video quasi aus dem Programm rausgeholt werden kann und woanders hin kopiert werden kann (wo auch immer man das eben hin haben möchte)
Das kannst du doch nativ mit Java machen. Das Video, wie jede andere Datei auch, kopieren, zb. mit der Files klasse (java7+). .
Files.copy(source,destination);
https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
OK, habs jetzt, vielen Dank. Stand da irgendwie auf dem Schlauch, hab schon länger nicht mehr damit gearbeitet ^^
Du öffnest das mp4 zum Lesen und die neu zu erstellende Datei zum schreiben, dann kopierst Du die Datei und schließt beide Dateien... fertig !!!
z.B. so:
public static void copyFile(File in, File out) throws IOException {
FileChannel inChannel = null;
FileChannel outChannel = null;
try {
inChannel = new FileInputStream(in).getChannel();
outChannel = new FileOutputStream(out).getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} catch (IOException e) {
throw e;
} finally {
try {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
} catch (IOException e) {}
}
}
dann kannst Du die Funktion so verwenden:
File inF = new File("/home/user/movie.mp4");
File outF = new File("/new/folder/movie.mp4");
copyFile(inF, outF);
zumindest habe ich es nicht hinbekommen das Video nativ in einem JFrame abspielen zu können
Dafür ist JavaFX auch besser geeignet.
Meine Frage ist jetzt aber, wie ich das Video, dass im Resource Ordner liegt, in eine Datei bekomme, die ich dann wiederum mit dem JFileChooser woanders ablegen kann?
Dank Java NIO geht das ziemlich einfach: https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.io.InputStream,java.nio.file.Path,java.nio.file.CopyOption...)
Files.copy(getClass().getResourceAsStream("<Resource>"), Paths.get("video.mp4"));
Und wie genau? Es liegt schon am richtigen Ort, das ist nicht mein Problem, aber wie kann ich innerhalb von Java mp4 Dateien lesen und schreiben? Bei Bildern kann ich ja mit BufferedImages und ImageIO arbeiten, aber was ist mit Videos?