Dateitypen Umwandlungen Nötig?

MiMa

Top Contributor
Hallo,

ich bin immer noch ausgiebig mit dem Umgang von Dateien am experimentieren.

Ich habe folgende Klasse:

Java:
import java.io.File;

public class Datei 
{
    
    // Instanzvariablen für Dateien
    
    private String quellOrdner;     // Quellverzeichnisses von dem die Dokumente importiert werden
    private String name;            // Dokumentname ohne Pfad, ohne Endung
    
    // Konstruktor für Dateien
    public Datei(String quellOrdner)
    {
        this.quellOrdner = quellOrdner;
    }
    
    // Methoden für Dateien
    public String getQuellOrdner()                  {return quellOrdner;}
    public void setQuellOrdner(String quellOrdner)  {this.quellOrdner = quellOrdner;}
    
    public String getName()                         {return name;}
    public void setName(String name)                {this.name = name;}
}

Das Zugehörige Programm liesst aus einem Ordner alle Inhalte in ein Array ein und von Dort soll es dann Schrittweise ausgelesen werden. Die Schleife habe ich zur Zeit noch deaktiviert. Im jetzigen Zustand holt das Programm den 3. Wert aus dem Array und stellt diesen dar.

Java:
import de.michael.klassen.Datei;
import java.io.File;

public class DateiTest
{
    public static void main(String[] args) throws Exception
    {
        // Dateiobjekte erzeugen
        Datei fileDatei = new Datei("/Volumes/Daten-Dokumente/OCR");
        File pfad = new File(fileDatei.getQuellOrdner());
        
        // File Array
        File[] dateiListe = pfad.listFiles();
        int anzahl = (pfad.list().length);
         
        // Schleife für einzelne Ausgabe der Dateien: ANFANG
        // for (int i = 0; i <= anzahl - 1 ; i++)                               // So ist es korrekt
        // for (int i = 0; i < anzahl ; i++)                                    // So ist es auch korrekt
        // {
        
            // Dateiname aus dem Array ermitteln und in die Instanzvariable
            // fileDatei.setName(dateiListe[i].getName().toString());
            fileDatei.setName(dateiListe[2].getName().toString());
                        
            // Auslesen der Instanzvableng
            System.out.println("Quellordner: " + fileDatei.getQuellOrdner());
            System.out.println("Name: " + fileDatei.getName());
           
            // Zur korrektur den ermittelten Dateinamen ausgeben
            // System.out.println("Datei " + i + " " + dateiName); 
        // }
        // Schleife für einzelne Ausgabe der Dateien: ENDE
        
        System.out.println("Es wurden " + anzahl + " Dateien gefunden." );
    }
}

Ich musste einige Variablen hinzufügen weil die Datentypen nicht stimmten und wollte mal nachfragen, ob es nicht doch anders gemacht werden könnte.

In der Variable "quellOrdner" ist der Dateityp String.
Ich wollte eine Dateiliste erzeugen die den Inhalt des Quellordners benutzt.
Und zwar wollte ich das so machen.
Java:
File[] dateiListe = fileDatei.getQuellOrdner().listFiles();
Aber listFiles() ist nicht verfügbar, weil nur int Methoden gingen wie length.
Also habe ich dann ein neues Objekt vom Typ File mit der Variable "Pfad" erzeugt.

Habe ich es denn so nun richtig gemacht?
Ich meine das Programm läuft, aber macht man das so?

Vielen Dank
Mi
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Java:
            // Dateiname aus dem Array ermitteln und in die Instanzvariable
            // fileDatei.setName(dateiListe[i].getName().toString());
            fileDatei.setName(dateiListe[2].getName().toString());
Wirklich verstanden was Du vorhast habe ich nicht. Versuchst Du hier die Klasse File nachzubauen?

Hinweis
Code:
getName()
liefert bereits einen String
Code:
toString()
ist hier völlig unnötig

fileDatei ist doch ein Verzeichnis ("/Volumes/Daten-Dokumente/OCR")!? Warum willst Du diesem Datei Objekt den Namen des dritten Files im Verzeichnis zuweisen?

Für mich sieht das irgendwie aus als würdest Du gerne die Dateien Deines Verzeichnisses in Datei Objekt abbilden und in einer Schleife den Namen setzen. Wenn dem so ist macht der Code irgendwie nicht viel Sinn.
 

MiMa

Top Contributor
Hallo Michael,

die Klasse File nach zu bauen ist nicht meine Absicht.
Ich möchte ein Programm schreiben, das Dateien in einem Verzeichnis überprüft, ob es wirklich eine Datei ist.

Wenn ja, dann erzeugt es ein Objekt und füllt die Instanzvariablen aus der Klasse "Datei" mit "setInstanzvariable" und bei der Ausgabe auf den Bildschirm hole ich mir mit "getInstanzvariable" die Informationen heraus.

Die Inhalte der jeweiligen Dateien werden untersucht und ausgegeben. Als Java Neuling finde ich das eine echt spannende Sache.

Ja das mit dem "getName" ist wohl eine ziemlich unglückliche Geschichte, denn ich habe in der Klasse "Datei" folgende Instanzvariable deklariert:

Java:
private String name;            // Dokumentname ohne Pfad, ohne Endung

Diese sollte für den Dateinamen stehen. Einige Zeit habe ich darüber nachgedacht und konnte mich nicht entscheiden, weil ich nicht genau wusste, ob ich später mal auf folgende Konvention treffe.

Klasse Datei zugriff
Datei.quellOrdner
Datei.name
Datei.endung
....

oder so

Klasse Datei
Java:
private String dateiQuellOrdner;     // Quellverzeichnisses von dem die Dokumente importiert werden
private String dateiName;            // Dokumentname ohne Pfad, ohne Endung
private String dateiEndung;          // Dokumentendung (Aus Datenbank holen)

und möchte aber vermeiden irgendwann mal schreiben zu müssen:

Klasse Datei zugriff
Datei.DateiQuellOrdner
Datei.DateiDateiName
Datei.DateiEndung

Folgende Zeile
Java:
Datei fileDatei = new Datei("/Volumes/Daten-Dokumente/DM OCR");
Erstellt ein Objekt und der Pfad der darin ist, wird über einen Konstruktor in der Klasse Datei direkt in die Instanzvariable "QuellOrdner" geschrieben.


Hier ist der aktuelle Code, den ich noch umgebaut habe, inklusive funktionierender Schleife.

Java:
package testprogramme;

import de.michael.klassen.Datei;
import java.io.File;
import org.apache.tika.*;
import org.apache.tika.mime.MediaType;

public class DateiTest
{

    public static void main(String[] args) throws Exception
    {
        // Dateiobjekte erzeugen
        Datei fileDatei = new Datei("/Volumes/Daten-Dokumente/DM OCR");
        File pfad = new File(fileDatei.getQuellOrdner());

        // Ausgabe des Quellordners
        System.out.println("Quellordner: " + fileDatei.getQuellOrdner());

        // File Array füllen
        File[] dateiListe = pfad.listFiles();
        int anzahl = (pfad.list().length);

        // Schleife für einzelne Ausgabe der Dateien: ANFANG
        int anzahlDokumente = 0;
        for (int i = 0; i < anzahl; i++)                                        
        {
            // Prüfen ob die Datei ein Ordner oder eine Datei ist
            File arrayDokument = dateiListe[i];
            if (arrayDokument.isFile())
            {
                // Dateiname aus dem Array ermitteln und in die Instanzvariable
                fileDatei.setName(dateiListe[i].getName().toString());          // Dateiname ohne Pfad  

                // Auslesen der Instanzvableng
                System.out.println("Datei " + i + " " + fileDatei.getName());

                // Medientyp Inspektor
                Tika fileTyp = new Tika();
                String dateiTyp = fileTyp.detect(arrayDokument);
                System.out.println("Dateityp:      " + dateiTyp);

                MediaType dokumentTyp = MediaType.parse(dateiTyp);
                System.out.println("Haupt Typ:     " + dokumentTyp.getType());
                
                // Dokumentendung in die Instanzvariable speichern
                fileDatei.setEndung(dokumentTyp.getSubtype());
                System.out.println("Unter Typ:     " + fileDatei.getEndung());

                /*
                // Textinhalt aus Datei extrahieren in die Instanzvariable
                fileDatei.setOcrText(new Tika().parseToString(arrayDokument));
                System.out.println(fileDatei.getOcrText());
                */
                
                // Zähler für Dokumente
                anzahlDokumente = anzahlDokumente + 1;
            }
        }
        // Schleife für einzelne Ausgabe der Dateien: ENDE

        System.out.println("Es wurden " + anzahlDokumente + " Dateien gefunden.");
    }
}

Viele Grüsse
Mi
 
Zuletzt bearbeitet:

mla.rue

Bekanntes Mitglied
Deine Klasse Datei ist denke ich überflüssig, du machst dort nichts, was File nicht schon kann. Du würdest dir ein paar Zeilen code, was auch der Übersichtdienlich ist, sparen. Die ganze Untersuchungs-Sache würde ich in eine extra Methode auslagern. Ansonsten sehe ich nicht, wieso man das nicht so machen sollte.
 

MiMa

Top Contributor
Die Klasse Datei habe ich erstellt, weil dort alle Instanzvariablen gespeichert werden, die ich für den Durchlauf einer Dateierkennung benötige. Zur Zeit ist das noch nicht sonderlich viel, aber das füllt sich nach und nach. Es werden noch einige Klassen und Methoden kommen, die Inhalte zu der entsprechenden Datei generiert und in die Instanzvariable der Klasse Datei speichert.

Je nach Art der Datei wird die Klasse Datei um weitere Instnazvariablen erweitert.

Mi
 
Zuletzt bearbeitet:

Neue Themen


Oben