eigene Klasse durch Composition mit java.io.File erweitern

mandypb86

Mitglied
Hallo zusammen,

ich steh grad aufm Schlauch.

Hab mich jetzt soweit durchs Netz gelesen, dass ich mir sicher bin für meine Zwecke, die Composition nutzen zu müssen/können, doch hab grad noch keinen genauen Plan, wie ich das anstellen soll.

Ich möchte in meinem Programm (übrigens eclipse RCP, falls das hier eine Rolle spielt) mittels eines TreeViewers durch das lokale Filesystem browsen, dabei aber nur Directories und ganz bestimmte Dateien anzeigen lassen.

Diese ganz bestimmten Dateien (nennen wir sie mal Lieddateien) sind im Grunde auch nichts anderes als ganz normale Dateien. Ich kenne aber die genaue Struktur der bytes in diesen Dateien und möchte ihnen eine eigene Klasse geben, um mit anderen eigenen Methoden weiter drauf zugreifen zu können (z.B. Anzeigen von bestimmten Werten, die ich aus den bytes auslesen kann oder später auch Editieren bestimmter Inhalte dieser Dateien).

Der Filebrowser (ein TreeViewer mit TreeColumns) soll aber trotzdem noch ganz normal die Directories aufklappen und deren Unterelemente anzeigen sprich getChildren() usw.

Wie verbinde ich das jetzt am geschicktesten?

Was mir vor allem Sorgen macht, ist die Methode listFiles() aus java.io.File. Diese liefert ja File[] zurück, was ich bräuchte, wäre aber Song[] (meine Lieddateien).

Gefiltert mittels eines ViewerFilters hatte ich die Dateien schon (mittels auslesen der ersten 64 bytes, die diese Dateien erkennbar machen), nur das Anzeigen der spezifischen Variablen im Viewer ging natürlich nicht, da ich von File auf Song nicht so einfach casten kann. Daher kam die Idee mit der Composition.

Jemand nen Hinweis oder ne Idee für mich?

Schonmal vielen Dank im Voraus

M@ndy
 

faetzminator

Gesperrter Benutzer
Am Besten machst du dir eine Methode [c]listSongs()[/c]. [c]Song[/c] sollte einen Konstruktor [c]Song(File)[/c] kennen (natürlich kann z.B. auch eine [c]URI[/c] verlangt werden, aber das kann man alles bereits [c]File[/c] übergeben) und evtl. eine statische Methode zur Überprüfung eines Files kennen (und natürlich von [c]File[/c] erben...).

Hier ein Beispiel:

Java:
public class Song extends File {

    public Song(File file) {
        super(file.toURI()); // Aufruf von File(URI)
    }

    public List<Song> listSongs() { // natürlich kann man auch Song[] zurückgeben...
        List<Song> songs = new LinkedList<Song>();
        for (File file : listFiles()) {
            if (Song.isSong(file)) {
                songs.add(new Song(file));
            }
        }
        return songs;
    }

    public static boolean isSong(File file) {
        return file.getName().endsWith(".foo"); // was du auch immer prüfen willst
    }
}
 
Zuletzt bearbeitet:

mandypb86

Mitglied
Hallo faetzminator,

von File zu erben wollte ich eben vermeiden, da es an anderer Stelle nicht empfohlen wird, daher wollte ich ja die Composition verwenden, sprich nur eine Referenzvariable auf File nutzen.

Eine listSongs()-Methode wie du sie vorschlägst, in Kombination mit einer isSong Abfrage klingt erstmal vernünftig.

Ich stelle mir das ungefähr so vor:

Java:
class Song{
  File file;
  
  public Song(byte[] ihv, File file) // das übergebene byte[] enthält hier meine Informationen, die ich auslese
  {
    this.file = file;
  }

  public Song[] listSongs(){
    File[] files = this.file.listFiles();
    Song[] songs = new Song[files.length];
    
/*
    und von dort irgendwie weiter
    vllt für alle gefundenen Files einen neuen Song erstellen und mit new Song(files[i]) erzeugen
*/
    Song possibleSong;
    for(int i=0;i<files.length;i++){
      possibleSong = readFile(files[i].getName());
      if (!possibleSong==null){
        songs[i] = possibleSong;
      }
    }
     return songs[];
  }

  private Song readFile(String filename){
    // lese erste 64 bytes und prüfe daran, ob es sich um einen Song handelt
    // wenn ja, liefere den neu erstellten Song zurück, der mit dem byte[] und dem File (aus filename) erstellt wird
    // sonst null
  }
}

Könnte das so erstmal funktionieren?

Aber was mach ich dann mit den Directories, die ich zwangsläufig brauche, um weiter durch den Tree zu navigieren.
Abfragen könnte ich sie ja, aber wie behandel ich die dann? Als Song geht ja schlecht.
 

faetzminator

Gesperrter Benutzer
Wie gesagt, mit meiner (und dem in dir verlinkten Thread geposteten) Idee funktioniert das.
Aber stimmt, das hab ich irgendwie missverstanden. Du kannst natürlich wieder das selbe machen, aber das [c]file[/c] vom Konstruktor intern verwalten. Kommt fast auf das gleiche raus, du musst einfach entweder ein [c]getFile()[/c] anbieten oder die Methoden von [c]File[/c] implementieren (bzw. evtl. dahin delegieren).
Edit: deine Idee mit dem [c]null[/c]-Check würde zwar korrekt implementiert funktionieren, aber ist etwas unschön. Lieber zuerst überprüfen und einen boolean zurückgeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
P Eigene Exception Klasse Allgemeine Java-Themen 7
S OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden Allgemeine Java-Themen 9
E Eigene Exception Klasse erstellen Allgemeine Java-Themen 3
S Methoden Eigene Klasse als Rückgabewert Allgemeine Java-Themen 6
M Eigene Klasse verschlüsselt in Datei speichern Allgemeine Java-Themen 13
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
M Eigene Factory Klasse Allgemeine Java-Themen 21
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
S eigene Klasse die JButton extended - als Liste! Allgemeine Java-Themen 6
J Kann eigene Klasse nicht ermitteln Allgemeine Java-Themen 4
W eigene event-Klasse, event posten Allgemeine Java-Themen 2
M Eigene Exception Klasse Allgemeine Java-Themen 4
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
RalleYTN Eigene ScriptEngine? Allgemeine Java-Themen 14
L Eigene Dependency Injections definieren? Allgemeine Java-Themen 4
K Eigene API erstellen? Allgemeine Java-Themen 13
T Best Practice Eigene GUI programmieren | MouseMotion Detection Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
J eigene Java Bibliothek Allgemeine Java-Themen 2
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
D Eigene/r Collection/Container Allgemeine Java-Themen 3
F Eigene .jar mit anderer .jar öffnen Allgemeine Java-Themen 7
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
T OOP Die eigene Bruchklasse Allgemeine Java-Themen 11
J Java - Eigene DLL importieren Allgemeine Java-Themen 25
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
N Geodaten für eigene Routenplanung Allgemeine Java-Themen 5
C Eigene Sounddateien schreiben Allgemeine Java-Themen 12
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
S eigene Update Funktion Allgemeine Java-Themen 5
H2SO3- getMethods(): eigene methoden rausfinden Allgemeine Java-Themen 4
C eine eigene Javadoc erstelen Allgemeine Java-Themen 3
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
S Eigene Bibliothek Allgemeine Java-Themen 2
M Eigene Dateiendung? Allgemeine Java-Themen 3
M Plugins für eigene Programme Allgemeine Java-Themen 3
S Eigene Events feuern Allgemeine Java-Themen 3
A Eigene Java Plugins entwickeln - wie optimal? Allgemeine Java-Themen 14
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
U Eigene "Dining Philosopher" Interpretation weckt Philos nie auf Allgemeine Java-Themen 2
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
SuperSeppel13 Packete der Java Bibliothek ins eigene Prjekt integrieren Allgemeine Java-Themen 4
G Umgebungsvariabeln auslesen (Path, Temp, oder eigene) Allgemeine Java-Themen 2
T Eigene PID ermitteln! Allgemeine Java-Themen 3
D Icon für eigene Dateiendung Allgemeine Java-Themen 7
G Eigene "Speicherverwaltung" Allgemeine Java-Themen 5
H eigene Annotations Allgemeine Java-Themen 2
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
A Eigene Wrapper-Klassen Allgemeine Java-Themen 2
M Wann verwendet man PropertyChangedEvents, wann eigene? Allgemeine Java-Themen 3
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
B eigene Klassen verkaufen Allgemeine Java-Themen 2
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
M Eigene .jar in anderes Programm importieren[eclipse] Allgemeine Java-Themen 6
T Eigene Libary Allgemeine Java-Themen 6
E Eigene Exception Allgemeine Java-Themen 11
Q Bibliotheken mit ins eigene Jar aufnehmen Allgemeine Java-Themen 4
M eigene Objekte vergleichen Allgemeine Java-Themen 6
K log4j - eigene Info-Ausgaben Allgemeine Java-Themen 5
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
G JWindow verschieben bei mousedragged auf eigene titelleiste Allgemeine Java-Themen 3
N Methoden in eigene Dateien auslagern? Allgemeine Java-Themen 10
B Eigene Datentypen Allgemeine Java-Themen 5
G Brauche hilfe bei JMF: Wie eigene Streaming Data Source! Allgemeine Java-Themen 4
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
O Externe Jars in eigene JAr packen in Eclipse Allgemeine Java-Themen 5
R Updateprozedur ü. Internet fürs eigene Programm? Allgemeine Java-Themen 24
G eigene uhrzeit in einer java applikation führen Allgemeine Java-Themen 19
R Eigene Konfigurationsdatei für größere Projekte. Allgemeine Java-Themen 4
J Eigene Callback Methode? Allgemeine Java-Themen 3
S eigene evetns erstellen Allgemeine Java-Themen 5
K eigene GUI Komponente wird nicht angezeigt Allgemeine Java-Themen 3
D Eigene Classes aus anderen .java-Dateien Allgemeine Java-Themen 2
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
C Die Konsole ins eigene Programm einbauen Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben