ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
419
419
EMPFEHLEN
-
Hallo.
Ich arbeite gern mit Videos und Effekten und habe deshalb viele Videos auf meiner Platte rumfliegen. Das ganze natürlich über viele verschiedene Ordner verteilt und teilweise auch in Vergessenheit geraten. Deshalb habe ich mir überlegt ein Programm zu schreiben, dass mir eine Liste aller Videodateien auflistet und diese Liste dann auch aktualisiert. Natürlich sortierbar nach verschiedenen Kriterien. Danach wollte ich das ganze erweitern, damit ich die Dateien mit verschiedenen Programmen öffnen kann, evtl eine kleine Vorschau, Videoinformationen wie Auflösung, Codec, etc. anzeigen lassen, nur bin ich schon bei der Aktualisierung der Dateien auf kleinere Probleme gestoßen.
Ich habe im Moment 2 Klassen, einmal eine namens "Video", in der ich den Pfad speichere und später evtl noch zusätzliche Informationen reinschreibe, damit ich das ganze schön in Listenform präsentieren kann und eine Klasse "Searcher" mit der ich das Dateisystem nach Videos durchsuche und diese dann als Videoobjekt in eine LinkedList reinpacke. Jetzt tritt das erste Problem auf. Nicht mehr existente Videos zu entfernen ist kein Problem, einmal drüber laufen über die LinkedList und fragen ob die Datei noch existiert, wenn nein aus der LinkedList rauswerfen. Jetzt würde ich aber auch gerne neue Dateien dazupacken, nur leider habe ich keine Idee wie ich das "schön" programmieren kann. Natürlich gibts die Möglichkeit für jede Videodatei nochmal über die komplette LinkedList drüber zu laufen, zu schauen ob es drin ist und gegenbenfalls die Datei in die Liste reinpacken, aber das ist irgendwie unschön, oder? Wenn ich zum Beispiel all meine Festplatten als Ort angebe und er bei jeder Datei nochmal alle abfragt, dann gehts irgendwo Richtung quadratischer Laufzeit und ich habe gelernt sowas zu vermeiden
Gibts da eventuell einen besseren Weg?
Oder sollte ich sogar über eine komplett andere Struktur nachdenken? Ich habe mir kurzzeitig überlegt eine Map zu erstellen in der ich den Pfad mit einem Objekt verbinde, in dem ich dann entsprechend die benötigten Infos reinschreiben könnte. Es wäre definitiv einfacher für das Aktualisierungsproblem, aber eine gute Lösung?
Ich bin auch für komplett andere Alternativen offen. Immer her mit dem Vorschlägen
Hier mal die paar Zeilen die ich eben auf die schnelle programmiert habe:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
package priv.lfv; import java.io.File; public class Video { private File file = null; public Video(File file) { this.file = file; } public String getPath() { return file.getAbsolutePath(); } public String getFileName() { return file.getName(); } public boolean exists() { return file.exists(); } }
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
package priv.lfv; import java.io.File; import java.util.LinkedList; import java.util.Stack; import java.util.regex.Pattern; public class Searcher { private LinkedList<Video> videoList = new LinkedList<Video>(); public Searcher(LinkedList<File> paths, String ext) { // All paths will be given to this function, searching them one after another // ext is a regular expressions which describes the files we are looking for for(File path : paths) { findVideoFiles(path, ext); } } public LinkedList<Video> getVideoFiles() { return videoList; } private void findVideoFiles(File startDir, String ext) { // Simple file search function going through all subdirectories of the given one // If there is a match with the pattern just put it on the videolist Stack<File> dirs = new Stack<File>(); Pattern p = Pattern.compile(ext, Pattern.CASE_INSENSITIVE); if(startDir.isDirectory()) { dirs.push(startDir); } while(dirs.size()>0) { // Unfortunately there is some trouble in reading directories like "System Volume Information" on windows machines // The test for non-null directory objects prevents some nasty NullPointerExceptions from happening File[] tempFiles = dirs.pop().listFiles(); if(tempFiles!=null) { for(File file : tempFiles) { if(file.isDirectory() && file.canRead()) dirs.push(file); else if(p.matcher(file.getName()).matches()) videoList.add(new Video(file)); } } } } public void updateVideoFiles() { // There are two things to be done here: checking files for existance and delete them if they are not present // and putting new files in the list if they appear on the hard drive. All the other files should be left untouched. for(Video vid : videoList) { if(!vid.exists()) videoList.remove(vid); } // TODO Get new files without clearing the whole LinkedList or running over it every time we find a new video file } }
-
19.09.10 22:12 #2Thinker Tutorials.de Gastzugang
-
20.09.10 08:23 #3
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
TreeSet ist sortiert

Genau wie SortedSet
TreeSet implementiert aber das NavigableSet interface, wodurch es mehr Funktionen anbietet zum durchschauen
Da musst du selbst in der API schauen, was dir ausreicht.Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
Wie sieht das denn mit den zusätzlichen Informationen aus, ich würde gerne zum Beispiel Codec, Auflösung, Länge, etc. später in einer Liste formatiert darstellen und dann halt auch dementsprechend das ganze sortieren können in der Ansicht. Wie stell ich das am besten an? Ich habe noch nie mit Tabellenstrukturen gearbeitet. Muss ich das erst auslesen, irgendwo reinpacken und dann anzeigen oder kann ich das auch direkt berechnen lassen während er das ganze anzeigt? Da dürfte die Sortierung dann wohl einen Strich durch die Rechnung machen.
Meine erste Idee wäre jetzt spontan gewesen das ganze in eine Map zu packen, wie oben schon beschrieben, mit dem Pfad zur Datei als ersten Teil und die ganzen Eigenschaften als Klasse als zweiten Teil. Nur wie ordne ich das ganze dann? Ich denke Comparable wäre da wohl hilfreich, das müsste ich mir dann aber nochmal alles ansehen.
Wie immer bin ich für andere Vorschläge natürlich offen
Ähnliche Themen
-
In einer einfach Verkette Liste suchen
Von Vippis im Forum C/C++Antworten: 13Letzter Beitrag: 05.01.11, 12:00 -
ToDo Liste erst nach Reload aktuell!
Von my-azur im Forum HTML & XHTMLAntworten: 5Letzter Beitrag: 29.09.06, 12:43 -
Text aus String auslesen, splitten und danach suchen
Von Ilona85 im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 27.02.06, 10:52 -
Anfänger: Flash Prob: Dateien klein halten
Von Lukasz im Forum Flash PlattformAntworten: 4Letzter Beitrag: 28.12.04, 12:10 -
[Shell] Bilder-Liste aus Verzeichnis, danach als Parameter übergeben
Von Daxi im Forum Linux & UnixAntworten: 2Letzter Beitrag: 27.12.04, 16:04





Zitieren
Login





