Klassenbiliothek fuer Dateiverwaltung
ulrich
21 hours ago fd301d7773253458846b726ebb83ec2275693a3f
commit | author | age
e369b9 1 /*
c45b52 2   fm - File management class library
e369b9 3   Copyright (C) 2024  Ulrich Hilger
U 4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.fm;
19
20 import java.io.File;
21 import java.io.FileOutputStream;
22 import java.io.IOException;
23 import java.io.OutputStream;
24 import java.net.URLDecoder;
25 import java.util.logging.Level;
26 import java.util.logging.Logger;
27
28 /**
93965f 29  * Dateien und Ordner anlegen sowie gegebenenfalls den Inhalt von Dateien speichern.
e369b9 30  * 
U 31  * @author Ulrich Hilger
32  * @version 0.1, 07.11.2024
33  */
34 public class Writer {
35
243c03 36   /**
U 37    * Einen Ordner anlegen, wenn er noch nicht exisitert
38    * 
39    * @param file der Ordner, der angelegt werden soll
40    * @return 0, wenn der Ordner angelegt wurde, -1 wenn nicht
41    */
e369b9 42   public int newFolder(File file) {
U 43     if (!file.exists()) {
44       file.mkdir();
45       return 0;
46     } else {
47       return -1;
48     }
49   }
50   
51   /**
93965f 52    * Datei speichern. 
e369b9 53    * 
93965f 54    * <p>Eine existierende Datei gleichen Namens wird 
U 55    * zuvor geloescht (= Ueberschreiben).</p> 
56    * 
57    * <p>Wenn Aenderungen in eine schon existierende Datei gespeichert werden 
e369b9 58    * sollen, ist es noetig, die existierende Datei mit dem neuen Inhalt zu 
93965f 59    * ueberschreiben, so, wie es diese Methode ausfuehrt.</p>
e369b9 60    * 
93965f 61    * <p>Soll statdessen eine Datei neu erstellt werden und wird dabei also unterstellt, dass 
e369b9 62    * unter ihrem Namen am Ablageort noch keine Datei gleichen Namens existiert, muss 
93965f 63    * vor der Verwendung dieser Methode sichergestellt werden, dass es so ist.</p>
e369b9 64    * 
93965f 65    * @param file die Datei, in die gespeichert werden soll
U 66    * @param content  der zu speichernde Inhalt
e369b9 67    * @return 0, wenn erfolgreich, sonst -1
U 68    */
69   public int speichern(File file, String content) {
70     try {
71       if (file.exists()) {
72         /*
73         muss delete() sein?
74         pruefen: ueberschreibt der FileWriter den alten Inhalt oder
75         entsteht eine unerwuenschte Mischung aus altem und neuem
76         Inhalt?
77         */
78         file.delete();
79       } else {
80         file.getParentFile().mkdirs();
81       }
82       String decoded = URLDecoder.decode(content, "UTF-8");
83       byte[] bytes = decoded.getBytes();
84       file.createNewFile();
85       try (OutputStream os = new FileOutputStream(file)) {
86         os.write(bytes);
87         os.flush();
88       }
89       return 0;
90     } catch (IOException ex) {
91       Logger.getLogger(Writer.class.getName()).log(Level.SEVERE, null, ex);
92       return -1;
93     }      
94   }  
95 }