Klassenbiliothek fuer Dateiverwaltung
ulrich
22 hours ago 8bde6f998b7112a15624e24e2ee070ebf24a9172
Dokumentation in Arbeit
4 files modified
2 files renamed
102 ■■■■■ changed files
src/de/uhilger/fm/Catalog.java 22 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/Deflator.java 4 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/DirList.java 18 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/FileRef.java 2 ●●● patch | view | raw | blame | history
src/de/uhilger/fm/Renamer.java 3 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/package-info.java 53 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/Catalog.java
File was renamed from src/de/uhilger/fm/Lister.java
@@ -37,32 +37,32 @@
 * @author Ulrich Hilger
 * @version 0.1, 05.11.2024
 */
public class Lister {
public class Catalog {
  public static final String STR_DOT = ".";
  /**
   * 
   * @param fName Name und relativer Pfad des Ordners, dessen Inhalt aufgelistet werden soll
   * @param ctxPath  Kontext Pfad zur Bildung des URL, der auf die Miniaturansicht verweist
   * @param relPathAndName Name und relativer Pfad des Ordners, dessen Inhalt aufgelistet werden soll
   * @param urlBase  Kontext Pfad zur Bildung des URL fuer Miniaturansicht und imgsrc bei Bilddateien
   * (koennte evtl. im Client gebildet werden, hier dann nur Mini-Dateiname zurueckgeben)
   * @param base  Basisverzeichnis, gegen das der relative Pfad aufgeloest werden soll
   * @return die Dateiliste als JSON String
   * @throws IOException 
   */
  public String liste(String fName, String ctxPath, String base/*, String path*/) throws IOException {
    File[] files = new File(base, fName).listFiles(new ImageFileFilter());
  public String list(String relPathAndName, String urlBase, String base) throws IOException {
    File[] files = new File(base, relPathAndName).listFiles(new ImageFileFilter());
    if (files != null && files.length > 0) {
      Arrays.sort(files);
      ArrayList liste = new ArrayList();
      for (File file : files) {
        Datei datei = new Datei();
        FileRef datei = new FileRef();
        String dateiName = file.getName();
        datei.setName(dateiName);
        if (file.isDirectory()) {
          datei.setTyp(Datei.TYP_ORDNER);
          datei.setTyp(FileRef.TYP_ORDNER);
        } else {
          datei.setTyp(Datei.TYP_DATEI);
          datei.setTyp(FileRef.TYP_DATEI);
        }
        String lowerName = dateiName.toLowerCase();
        if (lowerName.endsWith(ImageFileFilter.JPEG)
@@ -71,7 +71,7 @@
          datei.setBild(true);
          String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT));
          String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT));
          datei.setMiniurl(ctxPath + /*"/" + */ fName + ohneExt + ImageFileFilter.TN + ext);
          datei.setMiniurl(urlBase + /*"/" + */ relPathAndName + ohneExt + ImageFileFilter.TN + ext);
          //buildImgSrc(file, datei, ohneExt, ext);
        }
        liste.add(datei);
@@ -85,8 +85,8 @@
      //}
      if (!liste.isEmpty()) {
        DirList list = new DirList();
        list.setPfad(ctxPath + fName);
        list.setDateien(liste);
        list.setDirectory(urlBase + relPathAndName);
        list.setFiles(liste);
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
src/de/uhilger/fm/Deflator.java
@@ -27,7 +27,7 @@
import java.util.zip.ZipOutputStream;
/**
 * Eine Klasse mit Methoden zum Packen von Dateien #
 * Packen von Dateien
 *
 * @author Ulrich Hilger, 15. Januar 2024
 */
@@ -40,7 +40,7 @@
   * Einen Ordner packen.
   *
   * Als Ziel wird eine neue Datei mit Dateiendung '.zip' erzeugt, die so heisst wie der Ordner, der
   * gapckt werden soll. Die Datei mit dem gepackten Ordnerinhalt wird in dem Ordner angelegt, der
   * gepackt werden soll. Die Datei mit dem gepackten Ordnerinhalt wird in dem Ordner angelegt, der
   * den zu packenden Ordner enthaelt.
   *
   * @param fName Name des zu packenden Ordners
src/de/uhilger/fm/DirList.java
@@ -25,23 +25,23 @@
 * @author Ulrich Hilger, 15. Januar 2024
 */
public class DirList {
    private String pfad;
    private List<Datei> dateien;
    private String dir;
    private List<FileRef> dateien;
    public String getPfad() {
      return pfad;
    public String getDirectory() {
      return dir;
    }
    public void setPfad(String pfad) {
      this.pfad = pfad;
    public void setDirectory(String path) {
      this.dir = path;
    }
    public List<Datei> getDateien() {
    public List<FileRef> getFiles() {
      return dateien;
    }
    public void setDateien(List<Datei> dateien) {
      this.dateien = dateien;
    public void setFiles(List<FileRef> files) {
      this.dateien = files;
    }
    
  
src/de/uhilger/fm/FileRef.java
File was renamed from src/de/uhilger/fm/Datei.java
@@ -23,7 +23,7 @@
 * @author Ulrich Hilger
 * @version 1, 11. Mai 2021
 */
public class Datei {
public class FileRef {
  
  public static final String TYP_DATEI = "datei";
  public static final String TYP_ORDNER = "ordner";
src/de/uhilger/fm/Renamer.java
@@ -17,7 +17,6 @@
 */
package de.uhilger.fm;
import com.sun.net.httpserver.HttpExchange;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
@@ -33,7 +32,7 @@
  
  public static final String STR_DOT = ".";
  
  public String umbenennen(/*HttpExchange exchange, */String relPfad, String neuerName, File file)
  public String rename(/*HttpExchange exchange, */String relPfad, String neuerName, File file)
          throws IOException {
    File neueDatei;
    String fname = file.getName().toLowerCase();
src/de/uhilger/fm/package-info.java
@@ -1,19 +1,17 @@
/**
 * Klassen fuer das Dateimanagement mit java.nio.file.
 * Klassen fuer das Dateimanagement mit <code>java.nio.file</code>.
 * 
 * Die folgenden Funktionen sind enthalten:
 * 
 * <pre>
 * Ordnerinhalt auflisten:    
 *    Lister().liste(ordnerName, ctx, basisOrdner)
 *
 *   TODO: JSON-Liste und Miniurl sowie Handhabung von Bilddateien ueberpruefen
 *    Catalog().list(relPathAndName, miniUrlBase, baseDir)
 * 
 * Datei speichern:
 *    Writer.speichern(file, content)
 *    Writer().speichern(file, content)
 * 
 * Dateien und Ordner loeschen:
 *    Eraser.deleteFiles(relPfad, dateiname, basis)
 *    Eraser().deleteFiles(relPfad, dateiname, basis)
 * 
 * Kopieren von Dateien und Ordnern:
 *    Mover().copyOrMoveFiles(quelle, ziel, dateiNamen, op, base)
@@ -33,5 +31,48 @@
 * Entpacken einer ZIP-Datei:
 *    Inflator().extractZipfile(fileName, path, base)
 * </pre>
 *
 * <p>Die folgenden Funktionalitaeten sind in dieser Auspraegung einer
 * Dateiverwaltung fest angelegt. Sie sind damit Kandidaten fuer eine
 * Erweiterung dieser Klassenbibliothek um andere evtl. benoetigte
 * Auspraegungen.</p>
 *
 * <p>Handhabung von Bilddateien</p>
 *
 * Neben der Datei eines Bildes in Originalgroesse werden weitere Dateien als Varianten
 * eines Bildes unterstuetzt.
 *
 * In Dateilisten werden diese Varianten ausgeblendet und nur das Originalbild gezeigt.
 *
 * Die Dateinamen von Varianten eines Bildes muessen dazu einen mit Unterstrich beginnenden
 * Namenszusatz enthalten wie bspw. <code>_tn</code> fuer thumbnail oder <code>_sm</code>
 * fuer small usw. Gleichsam lassen sich damit Eigenschaften wie zum Beispiel
 * eine Base64-Kodierung kombinieren. Hier waere der Namenszusatz dann eine Kombination
 * aus Groesse und Kodierung wie mit <code>_sm_b64</code>, so dass sich fuer ein Bild stets
 * eine ganze Gruppe von Datien ergibt, z.B.:
 *
 * <pre>
 * bild.jpg
 * bild_sm.jpg
 * bild_sm_b64.jpg
 * </pre>
 *
 * Alle Dateioperationen dieser Klassenbibliothek wirken dennoch stets auf
 * alle Varianten des Bildes, wie es auf der Kommandozeile mit einem Wildcard-Operator
 * gemacht wuerde, z.B.
 *
 * <pre>
 *   cp /pfad/zum/bild*.jpg /pfad/zum/zielordner
 * </pre>
 *
 * Eine Dateiliste enthaelt aus diesem Grund fuer Bilddateien die beiden zusaetzlichen Angaben
 * <code>miniurl</code> und <code>imgsrc</code>.
 *
 * <p>Ordnerliste im JSON-Format</p>
 *
 * Die Liste mit Dateien eines Ordners wird im JSON-Format ausgegeben. Ueber eine
 * entsprechende Erweiterung koennte die Ausgabe in verschiedenen waehlbaren Formaten
 * erfolgen.
 *
 */
package de.uhilger.fm;