Klassenbiliothek fuer Dateiverwaltung
ulrich
19 hours ago 7e5166a55fa459deab5579f764b7bb34719e5ec9
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
  fm - File management class library
  Copyright (C) 2024  Ulrich Hilger
 
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as
  published by the Free Software Foundation, either version 3 of the
  License, or (at your option) any later version.
 
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Affero General Public License for more details.
 
  You should have received a copy of the GNU Affero General Public License
  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
package de.uhilger.fm;
 
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
 
/**
 * Umbenennen von Dateien
 * 
 * @author Ulrich Hilger, 15. Januar 2024
 */
public class Renamer {
  
  public static final String STR_DOT = ".";
  
  /**
   * Eine Datei oder einen Ordner umbenennen
   * 
   * @param neuerName  der Name fuer das Objekt
   * @param file  das Objekt, das umbenannt werden soll
   * @return der neue Name
   * @throws IOException wenn etwas schief geht
   */
  public String rename(/*HttpExchange exchange, *//*String relPfad,*/ String neuerName, File file) 
          throws IOException {
    File neueDatei;
    String fname = file.getName().toLowerCase();
    if(fname.endsWith(ImageFileFilter.JPEG) || fname.endsWith(ImageFileFilter.JPG) || 
            fname.endsWith(ImageFileFilter.PNG)) {
      neueDatei = renameImgFiles(file, neuerName);  
    } else {
      neueDatei = new File(file.getParentFile(), neuerName);
      file.renameTo(neueDatei);
    }
    return neueDatei.getName();
  }
  
  /**
   * Alle Varianten einer Bilddatei umbenennen
   * 
   * TODO einen sinnvolleren Rueckgabewert bauen
   * 
   * @param file  die Origianlbilddatei
   * @param newName  der neue Name
   * @return  Name der letzten Datei, die umbenannt wurde
   * @throws IOException   wenn etwas schief geht
   */
  public File renameImgFiles(/*File targetDir, */ File file, String newName) throws IOException {
    String alt;
    String neu;
    File neueDatei = file;
    
    File targetDir = file.getParentFile();
    int newdotpos = newName.lastIndexOf(STR_DOT);
    String newfname = newName.substring(0, newdotpos);
    String newext = newName.substring(newdotpos);
    //logger.fine("newfname: " + newfname + ", newext: " + newext);
    
    String fnameext = file.getName();
    int dotpos = fnameext.lastIndexOf(STR_DOT);
    String fname = fnameext.substring(0, dotpos);
    String ext = fnameext.substring(dotpos);
    //logger.fine("fname: " + fname + ", ext: " + ext);
    
    DirectoryStream<Path> stream = Files.newDirectoryStream(targetDir.toPath(), fname + "*" + ext); 
    for (Path path : stream) {
      //logger.fine(path.getFileName().toString());
      alt = path.getFileName().toString();
      //logger.fine("alt: " + alt);
      if(alt.contains(ImageFileFilter.TN)) {
        neu = newfname + ImageFileFilter.TN + newext;
      } else if (alt.contains(ImageFileFilter.KL)) {
        neu = newfname + ImageFileFilter.KL + newext;
      } else if(alt.contains(ImageFileFilter.GR)) {
        neu = newfname + ImageFileFilter.GR + newext;
      } else if(alt.contains(ImageFileFilter.MT)) {
        neu = newfname + ImageFileFilter.MT + newext;
      } else if(alt.contains(ImageFileFilter.SM)) {
        neu = newfname + ImageFileFilter.SM + newext;
      } else {
        neu = newName;
      }
      neueDatei = new File(targetDir, neu);
      path.toFile().renameTo(neueDatei);              
    }
    stream.close();
    return neueDatei;
  }
}