All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sta.mutils.FileUtils Maven / Gradle / Ivy


package com.sta.mutils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 

Name: FileUtils

*

Description: Hilfsklasse f?r Dateiverarbeitung. * * Urspr?nglicher Name: FileTools im Projekt Converter3. * Verlagert nach MUtils und umbenannt in FileUtils am 07.02.2020. * * Folgendes Problem ist aufgetreten: Bei Verwendung mit Web-Seiten(-Inhalten) und Auslieferung von Daten mit der copy-Methode * (z. B. Bilder, CSS-Dateien usw.), bricht zuweilen die Daten?bertragung ab (ggf. sogar gezielt durch den Client ausgel?st). * In der Folge kommt es also zu Fehlern beim write-Aufruf, danach funktioniert das fluch/close jedoch auch nicht, was wiederum * zu einem Fehler f?hrt, wodurch schlie?lich das close vom InputStream nicht mehr ausgef?hrt wurde. * * Korrektur: OutputStream und InputStream bei flush/close getrennt behandeln. * *

*

Comment: ... *

*

Copyright: Copyright (c) 2014, 2016, 2017, 2019-2021

*

Company: >StA-Soft<

* @author StA * @version 1.0 */ public final class FileUtils { /** * Hilfsmethode: Kopiert die Daten aus is nach os und schlie?t is und os bei Bedarf. * @param Typ des Ziel-Output-Streams * @param os Ziel-Output-Stream * @param is Quell-Input-Stream * @param close true: is und os schlie?en, false: beide nicht schlie?en * @return Ziel-Output-Stream (damit man z. B. bei einem ByteArrayOutputStream gleich toByteArray aufrufen kann) * @throws IOException im Fehlerfall */ public static T copy(T os, InputStream is, boolean close) throws IOException { try { final int MAX = 4 * 1024; byte[] b = new byte[MAX]; int len; while ((len = is.read(b)) > 0) { os.write(b, 0, len); } } finally { if (close) { try { os.flush(); os.close(); } catch (Exception ex) { // ignore } try { is.close(); } catch (Exception ex) { // ignore } } } return os; } /** * Datei kopieren. Quell- und Zieldatei werden nach dem Kopieren geschlossen. * @param dstfn Zieldateiname * @param srcfn Quelldateiname * @throws IOException im Fehlerfall */ public static void copy(String dstfn, String srcfn) throws IOException { copy(new FileOutputStream(dstfn), new FileInputStream(srcfn), true); } /** * Datei kopieren. Quell- und Zieldatei werden nach dem Kopieren geschlossen. * @param dst Zieldatei * @param src Quelldatei * @throws IOException im Fehlerfall */ public static void copyFile(File dst, File src) throws IOException { copy(new FileOutputStream(dst), new FileInputStream(src), true); } /** * Datei kopieren, optional nur falls neuer, mit optionalem ?berschreiben. * @param dst Zieldatei * @param src Quelldatei * @param onlyifnewer true: nur falls neuer, false: immer kopieren * @throws IOException im Fehlerfall */ public static void copyFile(File dst, File src, boolean onlyifnewer) throws IOException { if (!dst.exists() || !onlyifnewer || (dst.lastModified() < src.lastModified())) { copyFile(dst, src); } } /** * Alle Dateien aus dem Quellverzeichnis ins Zielverzeichnis kopieren, ohne Rekursion, mit ?berschreiben. * Der Name der Zieldatei bekommt ein Pr?fix (kann auch "" sein). * @param dstdir Zielverzeichnis * @param dstprefix Pr?fix f?r Zieldatei * @param srcdir Quellverzeichnis * @throws IOException im Fehlerfall */ public static void copyFiles(File dstdir, String dstprefix, File srcdir) throws IOException { String[] fns = srcdir.list(); if (fns != null) { for (String fn : fns) { File srcfile = new File(srcdir, fn); if (srcfile.isFile()) { copyFile(new File(dstdir, dstprefix + fn), srcfile); } } } } /** * Alle Dateien aus dem Quellverzeichnis ins Zielverzeichnis kopieren, ohne Rekursion, mit ?berschreiben. * @param dstdir Zielverzeichnis * @param srcdir Quellverzeichnis * @throws IOException im Fehlerfall */ public static void copyFiles(File dstdir, File srcdir) throws IOException { copyFiles(dstdir, "", srcdir); } //--------------------------------------------------------------------------- /** * Verzeichnis samt Inhalt l?schen, mit Rekursion. * @param path Verzeichnis, was gel?scht werden soll * @return true: erfolgreich, false: Fehler/Problem (z. B. Datei ge?ffnet/gesperrt) * @throws FileNotFoundException im Fehlerfall */ public static boolean deleteDirectory(File path) throws FileNotFoundException { if (!path.exists()) { throw new FileNotFoundException(path.getAbsolutePath()); } boolean res = true; if (path.isDirectory()) { File[] files = path.listFiles(); if (files != null) { for (File f : files) { res = res && deleteDirectory(f); } } } res = res && path.delete(); return res; } //=========================================================================== /** * Dummy-Constructor. */ private FileUtils() { } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy