com.sta.mutils.FileUtils Maven / Gradle / Ivy
Show all versions of xtools Show documentation
package com.sta.mutils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Name: FileTools
* 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);
}
//===========================================================================
/**
* Dummy-Constructor.
*/
private FileUtils()
{
}
}