[Schmitzm-commits] r601 - branches/1.0-gt2-2.6/src/schmitzm/io

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Dec 2 19:29:56 CET 2009


Author: alfonx
Date: 2009-12-02 19:29:55 +0100 (Wed, 02 Dec 2009)
New Revision: 601

Modified:
   branches/1.0-gt2-2.6/src/schmitzm/io/IOUtil.java
Log:
Added method readURLasString for convenience.
Formatted the code.. sorry..


Modified: branches/1.0-gt2-2.6/src/schmitzm/io/IOUtil.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/io/IOUtil.java	2009-12-01 17:59:07 UTC (rev 600)
+++ branches/1.0-gt2-2.6/src/schmitzm/io/IOUtil.java	2009-12-02 18:29:55 UTC (rev 601)
@@ -29,10 +29,12 @@
  ******************************************************************************/
 package schmitzm.io;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -41,157 +43,190 @@
 
 /**
  * Diese Klasse stellt statische Methoden fuer die Ein/Ausgabe zur Verfuegung.
- *
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
- *
+ * 
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ *         (University of Bonn/Germany)
+ * 
  * @version 1.0
  */
 public class IOUtil {
 
-  private static Logger LOGGER = Logger.getLogger( IOUtil.class.getName() );
+	private static Logger LOGGER = Logger.getLogger(IOUtil.class.getName());
 
-  /** {@link FileFilter}, der alle Dateien akzeptiert, aber keine Verzeichnisse. */
-  public static final FileFilter ALL_FILES_FILTER = createSimpleFileFilter("*", FilterMode.FILES_ONLY);
-  /** {@link FileFilter}, der alle Verzeichnisse akzeptiert, aber keine "normalen" Dateien. */
-  public static final FileFilter ALL_DIRS_FILTER = createSimpleFileFilter("*", FilterMode.DIR_ONLY);
-  /** {@link FileFilter}, der alle Dateien und Verzeichnisse akzeptiert. */
-  public static final FileFilter ALL_FILTER = createSimpleFileFilter("*", FilterMode.ALL);
+	/**
+	 * {@link FileFilter}, der alle Dateien akzeptiert, aber keine Verzeichnisse.
+	 */
+	public static final FileFilter ALL_FILES_FILTER = createSimpleFileFilter(
+			"*", FilterMode.FILES_ONLY);
+	/**
+	 * {@link FileFilter}, der alle Verzeichnisse akzeptiert, aber keine
+	 * "normalen" Dateien.
+	 */
+	public static final FileFilter ALL_DIRS_FILTER = createSimpleFileFilter(
+			"*", FilterMode.DIR_ONLY);
+	/** {@link FileFilter}, der alle Dateien und Verzeichnisse akzeptiert. */
+	public static final FileFilter ALL_FILTER = createSimpleFileFilter("*",
+			FilterMode.ALL);
 
-  /**
-   * Modi fuer Filter.
-   * @see IOUtil#createSimpleFileFilter(String, FilterMode)
-   * @see IOUtil#createRegExFileFilter(String, FilterMode)
-   * @author mojays
-   *
-   */
-  public static enum FilterMode {
-    /** Der Filter liefert nur Dateien, aber keine Verzeichnisse. */
-    FILES_ONLY,
-    /** Der Filter liefert nur Verzeichnisse, aber keine Dateien. */
-    DIR_ONLY,
-    /** Der Filter liefert Dateien und Verzeichnisse. */
-    ALL
-  }
+	/**
+	 * Modi fuer Filter.
+	 * 
+	 * @see IOUtil#createSimpleFileFilter(String, FilterMode)
+	 * @see IOUtil#createRegExFileFilter(String, FilterMode)
+	 * @author mojays
+	 * 
+	 */
+	public static enum FilterMode {
+		/** Der Filter liefert nur Dateien, aber keine Verzeichnisse. */
+		FILES_ONLY,
+		/** Der Filter liefert nur Verzeichnisse, aber keine Dateien. */
+		DIR_ONLY,
+		/** Der Filter liefert Dateien und Verzeichnisse. */
+		ALL
+	}
 
-  /**
-   * Prueft, ob ein {@link File} einen angegebenen {@link FilterMode}
-   * erfuellt.
-   * @param file eine Datei oder ein Verzeichnis
-   * @param mode Filter-Modus (wenn {@code null} wird {@link FilterMode#ALL}
-   *             angenommen
-   * @return {@code false} wenn die angegebenen Datei {@code null} ist
-   */
-  public static boolean fileFitsFilterMode(File file, FilterMode mode) {
-    if ( mode == null )
-      mode = FilterMode.ALL;
-    final boolean acceptFiles = FilterMode.ALL.equals(mode) || FilterMode.FILES_ONLY.equals(mode);
-    final boolean acceptDirs  = FilterMode.ALL.equals(mode) || FilterMode.DIR_ONLY.equals(mode);
+	/**
+	 * Prueft, ob ein {@link File} einen angegebenen {@link FilterMode}
+	 * erfuellt.
+	 * 
+	 * @param file
+	 *            eine Datei oder ein Verzeichnis
+	 * @param mode
+	 *            Filter-Modus (wenn {@code null} wird {@link FilterMode#ALL}
+	 *            angenommen
+	 * @return {@code false} wenn die angegebenen Datei {@code null} ist
+	 */
+	public static boolean fileFitsFilterMode(File file, FilterMode mode) {
+		if (mode == null)
+			mode = FilterMode.ALL;
+		final boolean acceptFiles = FilterMode.ALL.equals(mode)
+				|| FilterMode.FILES_ONLY.equals(mode);
+		final boolean acceptDirs = FilterMode.ALL.equals(mode)
+				|| FilterMode.DIR_ONLY.equals(mode);
 
-    return file != null && ( file.isDirectory() && acceptDirs || acceptFiles );
-  }
+		return file != null
+				&& (file.isDirectory() && acceptDirs || acceptFiles);
+	}
 
+	/**
+	 * Liefert den Index des Dateinames, an der die Dateinamen-Erweiterung
+	 * (inkl. Punkt) beginnt.
+	 * 
+	 * @param file
+	 *            Datei
+	 */
+	public static int getFileExtIdx(File file) {
+		return getFileExtIdx(file.getAbsolutePath());
+	}
 
-  /**
-   * Liefert den Index des Dateinames, an der die Dateinamen-Erweiterung
-   * (inkl. Punkt) beginnt.
-   * @param file Datei
-   */
-  public static int getFileExtIdx(File file) {
-    return getFileExtIdx(file.getAbsolutePath());
-  }
+	/**
+	 * Liefert den Index des Dateinames, an der die Dateinamen-Erweiterung
+	 * (inkl. Punkt) beginnt.
+	 * 
+	 * @param file
+	 *            Datei
+	 */
+	public static int getFileExtIdx(String pathOrName) {
+		int lastPointIdx = pathOrName.lastIndexOf('.');
+		int lastSepIdx = pathOrName.lastIndexOf(File.separatorChar);
+		if (lastPointIdx < lastSepIdx)
+			return -1;
+		return lastPointIdx;
+	}
 
-  /**
-   * Liefert den Index des Dateinames, an der die Dateinamen-Erweiterung
-   * (inkl. Punkt) beginnt.
-   * @param file Datei
-   */
-  public static int getFileExtIdx(String pathOrName) {
-	  int lastPointIdx = pathOrName.lastIndexOf('.');
-	  int lastSepIdx   = pathOrName.lastIndexOf(File.separatorChar);
-	  if ( lastPointIdx < lastSepIdx )
-		  return -1;
-	  return lastPointIdx;
-  }
+	/**
+	 * Liefert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
+	 * 
+	 * @param file
+	 *            Datei
+	 * @return Leerstring, falls die Datei keine Erweiterung hat
+	 */
+	public static String getFileExt(File file) {
+		return getFileExt(file, true);
+	}
 
-  /**
-   * Liefert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
-   * @param file Datei
-   * @return Leerstring, falls die Datei keine Erweiterung hat
-   */
-  public static String getFileExt(File file) {
-    return getFileExt(file, true);
-  }
+	/**
+	 * Liefert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
+	 * 
+	 * @param file
+	 *            Datei
+	 * @param withDot
+	 *            wenn {@code false} wird die Dateinamen-Erweiterung ohne den
+	 *            fuehrenden Punkt zurueckgegeben (z.B. "exe" statt ".exe")
+	 * @return Leerstring, falls die Datei keine Erweiterung hat
+	 */
+	public static String getFileExt(File file, boolean withDot) {
+		int extIdx = getFileExtIdx(file);
+		if (extIdx < 0)
+			return "";
+		if (!withDot)
+			extIdx++;
+		return file.getAbsolutePath().substring(extIdx);
+	}
 
-  /**
-   * Liefert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
-   * @param file Datei
-   * @param withDot wenn {@code false} wird die Dateinamen-Erweiterung ohne
-   *                den fuehrenden Punkt zurueckgegeben (z.B. "exe" statt ".exe")
-   * @return Leerstring, falls die Datei keine Erweiterung hat
-   */
-  public static String getFileExt(File file, boolean withDot) {
-    int extIdx = getFileExtIdx(file);
-    if ( extIdx < 0 )
-      return "";
-    if ( !withDot )
-      extIdx++;
-    return file.getAbsolutePath().substring(extIdx);
-  }
+	/**
+	 * Haengt an einen Dateinamen-Erweiterung eine Erweiterung an, sofern diese
+	 * noch nicht angehaengt ist.
+	 * 
+	 * @param file
+	 *            Datei
+	 * @param newExt
+	 *            neue Dateinamen-Erweiterung (mit oder ohne ".")
+	 * @return neues {@link File}-Objekt
+	 */
+	public static File appendFileExt(File file, String newExt) {
+		if (!newExt.startsWith("."))
+			newExt = "." + newExt;
+		String oldExt = getFileExt(file, true);
+		if (!oldExt.equalsIgnoreCase(newExt))
+			file = new File(file.getAbsolutePath() + newExt);
+		return file;
+	}
 
-  /**
-   * Haengt an einen Dateinamen-Erweiterung eine Erweiterung an, sofern diese
-   * noch nicht angehaengt ist.
-   * @param file Datei
-   * @param newExt neue Dateinamen-Erweiterung (mit oder ohne ".")
-   * @return neues {@link File}-Objekt
-   */
-  public static File appendFileExt(File file, String newExt) {
-    if (!newExt.startsWith("."))
-      newExt = "."+newExt;
-    String oldExt = getFileExt(file,true);
-    if ( !oldExt.equalsIgnoreCase(newExt) )
-      file = new File( file.getAbsolutePath() + newExt );
-    return file;
-  }
+	/**
+	 * Aendert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
+	 * 
+	 * @param file
+	 *            Datei
+	 * @param newExt
+	 *            neue Dateinamen-Erweiterung (ohne ".")
+	 * @return neues {@link File}-Objekt
+	 */
+	public static File changeFileExt(File file, String newExt) {
+		String baseName = getBaseFilePath(file);
+		return new File(baseName + "." + newExt);
+	}
 
-  /**
-   * Aendert die Dateinamen-Erweiterung (z.B. ".exe") einer Datei.
-   * @param file Datei
-   * @param newExt neue Dateinamen-Erweiterung (ohne ".")
-   * @return neues {@link File}-Objekt
-   */
-  public static File changeFileExt(File file, String newExt) {
-    String baseName = getBaseFilePath(file);
-    return new File( baseName+"."+newExt );
-  }
-
-
 	/**
 	 * Changes the ending (e.g. ".sld") of a {@link URL}
-	 *
-	 * @param url {@link URL} like <code>file:/sds/a.bmp</code>
-	 * @param postfix New file extension for the {@link URL} without <code>.</code>
-	 *
+	 * 
+	 * @param url
+	 *            {@link URL} like <code>file:/sds/a.bmp</code>
+	 * @param postfix
+	 *            New file extension for the {@link URL} without <code>.</code>
+	 * 
 	 * @return A new {@link URL} with new extension.
-	 *
-	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons Kr&uuml;ger</a>
 	 * 
+	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
+	 *         Kr&uuml;ger</a>
+	 * 
 	 */
-	public static URL changeUrlExt(final URL url, final String postfix) throws IllegalArgumentException{
+	public static URL changeUrlExt(final URL url, final String postfix)
+			throws IllegalArgumentException {
 		String a = url.toExternalForm();
-                final int lastDotPos = a.lastIndexOf('.');
-                if ( lastDotPos >= 0 )
-                  a = a.substring(0, lastDotPos);
-                a = a + "." + postfix;
+		final int lastDotPos = a.lastIndexOf('.');
+		if (lastDotPos >= 0)
+			a = a.substring(0, lastDotPos);
+		a = a + "." + postfix;
 		try {
 			return new URL(a);
 		} catch (final MalformedURLException e) {
-			throw new IllegalArgumentException("can't create a new URL for "+url+" with new extension "+postfix, e);
+			throw new IllegalArgumentException("can't create a new URL for "
+					+ url + " with new extension " + postfix, e);
 		}
 	}
-	
 
-	  /**
+	/**
 	 * Die Funktion soll der Funktion File.getParent() fuer URLs entsprechen.
 	 * Die URL wird in einen Sting konvertiert und dann (kuerzer) neu
 	 * zusammengesetzt. Falls eine Verkuerzung nicht moeglich ist, wird eine
@@ -199,8 +234,8 @@
 	 * 
 	 * @author <a href="mailto:skpublic at wikisquare.de">Stefan Alfons
 	 *         Kr&uuml;ger</a>
-	 *         
-	 *         
+	 * 
+	 * 
 	 */
 	public static URL getParentUrl(final URL url) throws MalformedURLException {
 		String a = url.toExternalForm();
@@ -209,16 +244,16 @@
 			a = a.substring(0, lastDotPos);
 
 		/**
-		 * The parent of jar:file:some!/bar.file is jar:file:some!/, not jar:file:some!  
+		 * The parent of jar:file:some!/bar.file is jar:file:some!/, not
+		 * jar:file:some!
 		 */
-		if (a.endsWith("!")) a+="/";
+		if (a.endsWith("!"))
+			a += "/";
 
 		return new URL(a);
 	}
 
-
-
-  /**
+	/**
 	 * @deprecated use getParentUrl()
 	 */
 	public static URL getParentURL(URL url) throws MalformedURLException {
@@ -226,285 +261,329 @@
 	}
 
 	/**
-	 * Erweitert eine {@link URL}. Bei der uebergebenen URL muss es sich um ein Verzeichnis handeln, sonst
-	 * wird eine {@link MalformedURLException} geschmissen
+	 * Erweitert eine {@link URL}. Bei der uebergebenen URL muss es sich um ein
+	 * Verzeichnis handeln, sonst wird eine {@link MalformedURLException}
+	 * geschmissen
+	 * 
 	 * @param base
 	 * @param string
-	 *
+	 * 
 	 * @throws MalformedURLException
 	 */
-	public static URL extendURL(URL base, String string) throws MalformedURLException {
+	public static URL extendURL(URL base, String string)
+			throws MalformedURLException {
 		String a = base.toExternalForm();
-		if (!a.endsWith("/")) a+= "/";
-		a+= string;
+		if (!a.endsWith("/"))
+			a += "/";
+		a += string;
 		return new URL(a);
 	}
 
+	/**
+	 * Liefert den Pfad ohne Erweiterung (z.B. ohne ".exe") einer Datei.
+	 * 
+	 * @param file
+	 *            Datei
+	 * 
+	 * @see #getBaseFileName(File)
+	 */
+	public static String getBaseFilePath(File file) {
+		int extIdx = getFileExtIdx(file);
+		if (extIdx < 0)
+			return file.getAbsolutePath();
+		return file.getAbsolutePath().substring(0, extIdx);
+	}
 
+	/**
+	 * Liefert den Dateinamen ohne Erweiterung (z.B. ohne ".exe") einer Datei.
+	 * 
+	 * @param file
+	 *            Datei
+	 * 
+	 * @see #getBaseFilePath(File)
+	 */
+	public static String getBaseFileName(File file) {
+		int extIdx = getFileExtIdx(file.getName());
+		if (extIdx < 0)
+			return file.getName();
+		return file.getName().substring(0, extIdx);
+	}
 
-  /**
-   * Liefert den Pfad ohne Erweiterung (z.B. ohne ".exe") einer Datei.
-   * 
-   * @param file Datei
-   * 
-   * @see #getBaseFileName(File)
-   */
-  public static String getBaseFilePath(File file) {
-    int extIdx = getFileExtIdx(file);
-    if ( extIdx < 0 )
-      return file.getAbsolutePath();
-    return file.getAbsolutePath().substring(0,extIdx);
-  }
+	/**
+	 * Liefert das oberste Verzeichnis zu einer Datei (Haupt-Verzeichnis).
+	 * 
+	 * @param file
+	 *            Datei
+	 */
+	public static File getRootDir(File file) {
+		File temp = new File(file.getAbsolutePath());
+		while (temp.getParentFile() != null)
+			temp = temp.getParentFile();
+		return temp;
+	}
 
-  /**
-   * Liefert den Dateinamen ohne Erweiterung (z.B. ohne ".exe") einer Datei.
-   * 
-   * @param file Datei
-   * 
-   * @see #getBaseFilePath(File)
-   */
-  public static String getBaseFileName(File file) {
-	  int extIdx = getFileExtIdx( file.getName() );
-	  if ( extIdx < 0 )
-		  return file.getName();
-	  return file.getName().substring(0,extIdx);
-  }
-  
-  /**
-   * Liefert das oberste Verzeichnis zu einer Datei (Haupt-Verzeichnis).
-   * @param file Datei
-   */
-  public static File getRootDir(File file) {
-    File temp = new File(file.getAbsolutePath());
-    while( temp.getParentFile() != null )
-      temp = temp.getParentFile();
-    return temp;
-  }
+	/**
+	 * Erzeugt ein neues File-Objekt relativ zu einer Pfad-Angabe.<br>
+	 * Im Normalfall setzt sich der neue Datei-Pfad aus <code>baseDir</code> und
+	 * <code>path</code> zusammen, also <i>newFile = <code>baseDir</code> +
+	 * <code>path<code></i>.<br>
+	 * <b>Ausnahme 1:</b><br>
+	 * Beginnt <code>path</code> mit einem Slash (bzw. Backslash bei Windows),
+	 * ist <i>newFile = ROOT(<code>baseDir</code>) + <code>path<code></i>,
+	 * wobei <i>ROOT(<code>baseDir</code>)</i></center> das Hauptverzeichnis
+	 * (Laufwerk) des Basis-Verzeichnisses bezeichnet.<br>
+	 * <b>Ausnahme 2:</b><br>
+	 * Stellt <code>path</code> bereits eine absolute Pfadangabe dar (inkl.
+	 * Laufwerksbezeichnung), ist <i>newFile = <code>path<code></i>.
+	 * 
+	 * @param baseDir
+	 *            Basis-Verzeichnis
+	 * @param path
+	 *            Pfad/Datei-Angabe relativ zu <code>baseDir</code>
+	 * @see #getRootDir(File)
+	 */
+	public static File createRelativeFile(File baseDir, String path) {
+		File file = new File(path);
 
-  /**
-   * Erzeugt ein neues File-Objekt relativ zu einer Pfad-Angabe.<br>
-   * Im Normalfall setzt sich der neue Datei-Pfad aus <code>baseDir</code> und
-   * <code>path</code> zusammen, also <i>newFile = <code>baseDir</code> + <code>path<code></i>.<br>
-   * <b>Ausnahme 1:</b><br>
-   * Beginnt <code>path</code> mit einem Slash (bzw. Backslash bei Windows), ist
-   * <i>newFile = ROOT(<code>baseDir</code>) + <code>path<code></i>,
-   * wobei <i>ROOT(<code>baseDir</code>)</i></center> das Hauptverzeichnis
-   * (Laufwerk) des Basis-Verzeichnisses bezeichnet.<br>
-   * <b>Ausnahme 2:</b><br>
-   * Stellt <code>path</code> bereits eine absolute Pfadangabe dar (inkl.
-   * Laufwerksbezeichnung), ist <i>newFile = <code>path<code></i>.
-   * @param baseDir Basis-Verzeichnis
-   * @param path Pfad/Datei-Angabe relativ zu <code>baseDir</code>
-   * @see #getRootDir(File)
-   */
-  public static File createRelativeFile(File baseDir, String path) {
-    File file = new File( path );
+		// In relPath steht absolute Pfadangabe -> BaseDir ignorieren
+		if (path.equalsIgnoreCase(file.getAbsolutePath()))
+			return file;
 
-    // In relPath steht absolute Pfadangabe -> BaseDir ignorieren
-    if ( path.equalsIgnoreCase( file.getAbsolutePath() ) )
-      return file;
+		// Source-Tag beginnt mit '\' -> Source-Angabe relativ zum
+		// Haupt-Verzeichnis
+		if (path.startsWith(File.separator))
+			return new File(IOUtil.getRootDir(baseDir), path);
 
-    // Source-Tag beginnt mit '\' -> Source-Angabe relativ zum Haupt-Verzeichnis
-    if ( path.startsWith( File.separator ) )
-      return new File(IOUtil.getRootDir(baseDir),path );
+		// Sonst: BaseDir als Basis fuer Source verwenden
+		return new File(baseDir, path);
+	}
 
-    // Sonst: BaseDir als Basis fuer Source verwenden
-    return new File(baseDir, path);
-  }
+	/**
+	 * Versucht einen Eingabe-Stream zu schliessen.<br>
+	 * Dabei werden bei Misserfolg keine Exceptions geworfen! SK: bei
+	 * <code>null</code> wird true zurueckgegeben
+	 * 
+	 * @param in
+	 *            zu schliessender Stream
+	 * @return <code>false</code> falls das Schliessen nicht erfolgreich war
+	 */
+	public static boolean closeInputStream(InputStream in) {
+		if (in == null)
+			return true;
+		try {
+			in.close();
+		} catch (Exception err) {
+			return false;
+		}
+		return true;
+	}
 
-  /**
-   * Versucht einen Eingabe-Stream zu schliessen.<br>
-   * Dabei werden bei Misserfolg keine Exceptions geworfen!
-   * SK: bei <code>null</code> wird true zurueckgegeben
-   *
-   * @param in zu schliessender Stream
-   * @return <code>false</code> falls das Schliessen nicht erfolgreich war
-   */
-  public static boolean closeInputStream(InputStream in) {
-	if (in == null) return true;
-    try {
-      in.close();
-    } catch (Exception err) {
-      return false;
-    }
-    return true;
-  }
+	/**
+	 * Versucht alle gegebenen Eingabe-Streams zu schliessen.<br>
+	 * Dabei werden bei Misserfolg keine Exceptions geworfen!
+	 * 
+	 * @param in
+	 *            zu schliessende Streams
+	 * @return <code>true</code> falls das Schliessen aller Streams erfolgreich
+	 *         war
+	 */
+	public static boolean closeInputStream(InputStream[] in) {
+		boolean result = true;
+		for (int i = 0; i < in.length; i++)
+			result &= closeInputStream(in[i]);
+		return result;
+	}
 
-  /**
-   * Versucht alle gegebenen Eingabe-Streams zu schliessen.<br>
-   * Dabei werden bei Misserfolg keine Exceptions geworfen!
-   * @param in zu schliessende Streams
-   * @return <code>true</code> falls das Schliessen aller Streams erfolgreich war
-   */
-  public static boolean closeInputStream(InputStream[] in) {
-    boolean result = true;
-    for (int i=0; i<in.length; i++)
-      result &= closeInputStream(in[i]);
-    return result;
-  }
+	/**
+	 * Versucht einen Ausgabe-Stream zu schliessen. Zuvor wird ein
+	 * {@link OutputStream#flush() flush()} auf den Stream getaetigt.<br>
+	 * Bei Misserfolg werden keine Exceptions geworfen! SK: bei
+	 * <code>null</code> wird true zurueckgegeben *
+	 * 
+	 * @param out
+	 *            zu schliessender Stream
+	 * @return <code>false</code> falls das Schliessen nicht erfolgreich war
+	 */
+	public static boolean closeOutputStream(OutputStream out) {
+		if (out == null)
+			return true;
+		try {
+			out.flush();
+			out.close();
+		} catch (Exception err) {
+			return false;
+		}
+		return true;
+	}
 
-  /**
-   * Versucht einen Ausgabe-Stream zu schliessen. Zuvor wird ein
-   * {@link OutputStream#flush() flush()} auf den Stream getaetigt.<br>
-   * Bei Misserfolg werden keine Exceptions geworfen!
-   * SK: bei <code>null</code> wird true zurueckgegeben   *
-   * @param out zu schliessender Stream
-   * @return <code>false</code> falls das Schliessen nicht erfolgreich war
-   */
-  public static boolean closeOutputStream(OutputStream out) {
-	  if (out == null) return true;
-    try {
-      out.flush();
-      out.close();
-    } catch (Exception err) {
-      return false;
-    }
-    return true;
-  }
+	/**
+	 * Prueft, ob eine (Datei-)Zeile mit einem Kommentarkennzeichen beginnt und
+	 * deshalb ignoriert werden muss. Kommentar-Kennzeichen sind <code>//</code>
+	 * , <code>#</code> und <code>|</code>.
+	 * 
+	 * @param line
+	 *            Eingabe-Zeile
+	 */
+	public static boolean isCommentLine(String line) {
+		return line.startsWith("//") || line.startsWith("#")
+				|| line.startsWith("|");
+	}
 
-  /**
-   * Prueft, ob eine (Datei-)Zeile mit einem Kommentarkennzeichen beginnt
-   * und deshalb ignoriert werden muss. Kommentar-Kennzeichen sind
-   * <code>//</code>, <code>#</code> und <code>|</code>.
-   * @param line Eingabe-Zeile
-   */
-  public static boolean isCommentLine(String line) {
-    return line.startsWith("//") ||
-           line.startsWith("#")  ||
-           line.startsWith("|");
-  }
+	/**
+	 * Schreibt einen Eingabe-Stream in eine Datei.
+	 * 
+	 * @param file
+	 *            Dateipfad fuer die Zieldatei
+	 * @exception java.io.IOException
+	 *                falls das Lesen aus dem Stream oder das Schreiben in die
+	 *                Ausgabedatei scheitert
+	 */
+	public static void writeStreamToFile(InputStream input, String file)
+			throws IOException {
+		OutputStream output = new FileOutputStream(file);
+		while (input.available() > 0)
+			output.write(input.read());
+		output.flush();
+		output.close();
+	}
 
-  /**
-   * Schreibt einen Eingabe-Stream in eine Datei.
-   * @param file      Dateipfad fuer die Zieldatei
-   * @exception java.io.IOException falls das Lesen aus dem Stream oder
-   *            das Schreiben in die Ausgabedatei scheitert
-   */
-  public static void writeStreamToFile(InputStream input, String file) throws IOException {
-    OutputStream output = new FileOutputStream(file);
-    while (input.available() > 0) output.write(input.read());
-    output.flush();
-    output.close();
-  }
+	/**
+	 * Erstellt einen Filter fuer einen regulaeren Ausdruck.
+	 * 
+	 * @param filterStr
+	 *            definiert den Filter
+	 */
+	public static FileFilter createRegExFileFilter(final String regEx,
+			final FilterMode mode) {
+		return new FileFilter() {
+			public boolean accept(File file) {
+				return fileFitsFilterMode(file, mode)
+						&& file.getName().matches(regEx);
+			}
+		};
+	}
 
-  /**
-   * Erstellt einen Filter fuer einen regulaeren Ausdruck.
-   * @param filterStr definiert den Filter
-   */
-  public static FileFilter createRegExFileFilter(final String regEx, final FilterMode mode) {
-    return new FileFilter() {
-      public boolean accept(File file) {
-        return fileFitsFilterMode(file,mode) && file.getName().matches(regEx);
-      }
-    };
-  }
+	/**
+	 * Erstellt einen Filter fuer einen Filter-String. Dieser kann als Wildcard
+	 * das Zeichen "*" enthalten. Alle anderen Zeichen werden direkt als Filter
+	 * verwendet.
+	 * 
+	 * @param filterStr
+	 *            definiert den Filter
+	 */
+	public static FileFilter createSimpleFileFilter(String filterStr,
+			final FilterMode mode) {
+		// Gross/Klein-Schreibung ignorieren
+		filterStr = filterStr.toLowerCase();
 
+		// ##### Filter definiert den "inneren" Teil eines Dateinames #####
+		if (filterStr.startsWith("*") && filterStr.endsWith("*")) {
+			// Filter besteht nur aus "*" --> alle Dateien akzeptieren
+			if (filterStr.length() <= 2)
+				return new FileFilter() {
+					public boolean accept(File file) {
+						return fileFitsFilterMode(file, mode);
+					}
+				};
+			// "inneren" Teil des Filters extrahieren
+			final String condStr = filterStr.substring(1,
+					filterStr.length() - 1);
+			return new FileFilter() {
+				public boolean accept(File file) {
+					return fileFitsFilterMode(file, mode)
+							&& file.getName().toLowerCase().contains(condStr);
+				}
+			};
+		}
 
-  /**
-   * Erstellt einen Filter fuer einen Filter-String. Dieser kann
-   * als Wildcard das Zeichen "*" enthalten. Alle anderen Zeichen
-   * werden direkt als Filter verwendet.
-   * @param filterStr definiert den Filter
-   */
-  public static FileFilter createSimpleFileFilter(String filterStr, final FilterMode mode) {
-    // Gross/Klein-Schreibung ignorieren
-    filterStr = filterStr.toLowerCase();
+		// ##### Filter definiert den Anfang eines Dateinames #####
+		if (filterStr.endsWith("*")) {
+			// Anfang des Filters extrahieren
+			final String condStr = filterStr.substring(0,
+					filterStr.length() - 1);
+			return new FileFilter() {
+				public boolean accept(File file) {
+					return fileFitsFilterMode(file, mode)
+							&& file.getName().toLowerCase().startsWith(condStr);
+				}
+			};
+		}
+		// ##### Filter definiert das Ende eines Dateinames #####
+		if (filterStr.startsWith("*")) {
+			// Ende des Filters extrahieren
+			final String condStr = filterStr.substring(1);
+			return new FileFilter() {
+				public boolean accept(File file) {
+					return fileFitsFilterMode(file, mode)
+							&& file.getName().toLowerCase().endsWith(condStr);
+				}
+			};
+		}
+		// ##### Filter definiert den genauen Dateinamen #####
+		final String condStr = filterStr;
+		return new FileFilter() {
+			public boolean accept(File file) {
+				return fileFitsFilterMode(file, mode)
+						&& file.getName().equalsIgnoreCase(condStr);
+			}
+		};
+	}
 
-    //##### Filter definiert den "inneren" Teil eines Dateinames #####
-    if ( filterStr.startsWith("*") && filterStr.endsWith("*") ) {
-      // Filter besteht nur aus "*" --> alle Dateien akzeptieren
-      if ( filterStr.length() <= 2 )
-        return new FileFilter() {
-          public boolean accept(File file) {
-            return fileFitsFilterMode(file,mode);
-          }
-        };
-      // "inneren" Teil des Filters extrahieren
-      final String condStr = filterStr.substring(1,filterStr.length()-1);
-      return new FileFilter() {
-        public boolean accept(File file) {
-          return fileFitsFilterMode(file,mode) && file.getName().toLowerCase().contains(condStr) ;
-        }
-      };
-    }
+	/**
+	 * Loescht Dateien oder Verzeichnisse in einem Verzeichnis. Das Verzeichnis
+	 * selbst wird dabei NICHT geloescht, auch wenn es am Ende leer ist!
+	 * 
+	 * @param dir
+	 *            Verzeichnis in dem Dateien/Verzeichnisse geloescht werden
+	 * @param filter
+	 *            bestimmt, welche Dateien/Verzeichnisse geloescht werden
+	 * @param recursive
+	 *            wenn {@code true} werden auch alle Dateien/Verzeichnisse in
+	 *            Unterverzeichnissen geloescht, die dem Filter entsprechen
+	 * @param showFiles
+	 *            wenn {@code true} werden die geloeschten Dateien auf der
+	 *            Console ausgegeben
+	 * @return Anzahl geloeschter Dateien und Verzeichnisse
+	 */
+	public static int deleteFiles(File dir, FileFilter filter,
+			boolean recursive, boolean showFiles) {
+		if (!dir.isDirectory())
+			return 0;
 
-    //##### Filter definiert den Anfang eines Dateinames #####
-    if ( filterStr.endsWith("*") ) {
-      // Anfang des Filters extrahieren
-      final String condStr = filterStr.substring(0,filterStr.length()-1);
-      return new FileFilter() {
-        public boolean accept(File file) {
-          return fileFitsFilterMode(file,mode) && file.getName().toLowerCase().startsWith(condStr) ;
-        }
-      };
-    }
-    //##### Filter definiert das Ende eines Dateinames #####
-    if ( filterStr.startsWith("*") ) {
-      // Ende des Filters extrahieren
-      final String condStr = filterStr.substring(1);
-      return new FileFilter() {
-        public boolean accept(File file) {
-          return fileFitsFilterMode(file,mode) && file.getName().toLowerCase().endsWith(condStr) ;
-        }
-      };
-    }
-    //##### Filter definiert den genauen Dateinamen #####
-    final String condStr = filterStr;
-    return new FileFilter() {
-      public boolean accept(File file) {
-        return fileFitsFilterMode(file,mode) && file.getName().equalsIgnoreCase(condStr) ;
-      }
-    };
-  }
+		int delCount = 0;
+		// Dateien im aktuellen Verzeichnis loeschen
+		File[] files = filter != null ? dir.listFiles(filter) : dir.listFiles();
+		for (File file : files) {
+			// Verzeichnis zunaechst leeren
+			if (file.isDirectory())
+				delCount += deleteFiles(file, null, true, showFiles);
+			boolean success = file.delete();
+			if (success)
+				delCount++;
+			if (showFiles) {
+				StringBuffer message = new StringBuffer(success ? "Deleted: "
+						: "Error: ");
+				try {
+					message.append(file.getCanonicalPath());
+				} catch (Exception err) {
+					message.append(file.getAbsolutePath());
+				}
+			}
+		}
+		// Wenn rekusiv geloescht werden soll, alle Verzeichnisse im Verzeichnis
+		// durchsuchen
+		if (recursive) {
+			File[] directories = dir.listFiles(ALL_DIRS_FILTER);
+			for (File directory : directories)
+				delCount += deleteFiles(directory, filter, recursive, showFiles);
+		}
+		return delCount;
+	}
 
-  /**
-   * Loescht Dateien oder Verzeichnisse in einem Verzeichnis. Das Verzeichnis selbst
-   * wird dabei NICHT geloescht, auch wenn es am Ende leer ist!
-   * @param dir       Verzeichnis in dem Dateien/Verzeichnisse geloescht werden
-   * @param filter    bestimmt, welche Dateien/Verzeichnisse geloescht werden
-   * @param recursive wenn {@code true} werden auch alle Dateien/Verzeichnisse
-   *                  in Unterverzeichnissen geloescht, die dem Filter entsprechen
-   * @param showFiles wenn {@code true} werden die geloeschten Dateien auf der
-   *                  Console ausgegeben
-   * @return Anzahl geloeschter Dateien und Verzeichnisse
-   */
-  public static int deleteFiles(File dir, FileFilter filter, boolean recursive, boolean showFiles) {
-    if ( !dir.isDirectory() )
-      return 0;
-
-    int delCount = 0;
-    // Dateien im aktuellen Verzeichnis loeschen
-    File[] files = filter != null ? dir.listFiles( filter ) : dir.listFiles();
-    for (File file : files) {
-      // Verzeichnis zunaechst leeren
-      if ( file.isDirectory() )
-        delCount += deleteFiles(file, null, true, showFiles);
-      boolean success = file.delete();
-      if ( success )
-        delCount++;
-      if ( showFiles ) {
-        StringBuffer message = new StringBuffer(success ? "Deleted: " : "Error: ");
-        try {
-          message.append( file.getCanonicalPath() );
-        } catch (Exception err) {
-          message.append( file.getAbsolutePath() );
-        }
-      }
-    }
-    // Wenn rekusiv geloescht werden soll, alle Verzeichnisse im Verzeichnis
-    // durchsuchen
-    if ( recursive ) {
-      File[] directories = dir.listFiles(ALL_DIRS_FILTER);
-      for (File directory : directories)
-        delCount += deleteFiles(directory, filter, recursive, showFiles);
-    }
-    return delCount;
-  }
-
-  /**
+	/**
 	 * Die Umwandlung einer URL in ein File-Objekt ist leider nicht trivial.
 	 * 
-	 * @see http
+	 * @see http 
 	 *      ://weblogs.java.net/blog/kohsuke/archive/2007/04/how_to_convert.html
 	 * 
 	 * @param url
@@ -513,7 +592,7 @@
 	 *         Kr&uuml;ger</a>
 	 */
 	public static File urlToFile(URL url) {
-//		LOGGER.debug("\nconverting " + url.toString() + " to ");
+		// LOGGER.debug("\nconverting " + url.toString() + " to ");
 		File f;
 		try {
 			f = new File(url.toURI());
@@ -521,40 +600,40 @@
 			// TODO Here we probably need more cases...
 			f = new File(url.getPath().replace("%20", " "));
 		}
-//		LOGGER.debug("        to " + f.toString());
+		// LOGGER.debug("        to " + f.toString());
 		return f;
 	}
-	
 
-	  /**
-	   * Fuehrt verschiedene Funktionen aus.
-	   * <ul>
-	   *   <li>{@code DELDIR name}<br>
-	   *       Loescht ein Verzeichnis aus allen Unterverzeichnissen.</li>
-	   * </ul>
-	   * @param arg
-	   */
-	  public static void main(final String[] arg) {
-	    if ( arg.length == 0 ) {
-	      System.err.println("Missing arguments.");
-	      return;
-	    }
+	/**
+	 * Fuehrt verschiedene Funktionen aus.
+	 * <ul>
+	 * <li>{@code DELDIR name}<br>
+	 * Loescht ein Verzeichnis aus allen Unterverzeichnissen.</li>
+	 * </ul>
+	 * 
+	 * @param arg
+	 */
+	public static void main(final String[] arg) {
+		if (arg.length == 0) {
+			System.err.println("Missing arguments.");
+			return;
+		}
 
-	    String func = arg[0].toUpperCase();
-	    if ( func.equals("DELDIR") ) {
-	      if ( arg.length < 2 ) {
-	        System.err.println("Missing arguments for DELDIR.");
-	      }
-	      File currDir        = new File(".");
-	      FileFilter filter   = createSimpleFileFilter(arg[1],FilterMode.DIR_ONLY);
-	      int        delCount = deleteFiles(currDir, filter, true, true);
-	    }
-	    else {
-	      LOGGER.error("Unknown function: "+func);
-	    }
-	  }
+		String func = arg[0].toUpperCase();
+		if (func.equals("DELDIR")) {
+			if (arg.length < 2) {
+				System.err.println("Missing arguments for DELDIR.");
+			}
+			File currDir = new File(".");
+			FileFilter filter = createSimpleFileFilter(arg[1],
+					FilterMode.DIR_ONLY);
+			int delCount = deleteFiles(currDir, filter, true, true);
+		} else {
+			LOGGER.error("Unknown function: " + func);
+		}
+	}
 
-	  /**
+	/**
 	 * The method File getTempDir() caches the system's temp direcotry here.
 	 * 
 	 * @see #getTempDir()
@@ -568,7 +647,8 @@
 	 * The folder is cached in a static {@link File} field.
 	 * 
 	 * @return A {@link File} object pointing to the system's temp directory.
-	 *         This method does some extra checks and returns a valid {@link File}
+	 *         This method does some extra checks and returns a valid
+	 *         {@link File}
 	 * 
 	 * @see
 	 *      <code>http://rationalpi.wordpress.com/2007/01/26/javaiotmpdir-inconsitency/</code>
@@ -579,7 +659,8 @@
 			String tempPath = System.getProperty("java.io.tmpdir", System
 					.getenv("TEMP"));
 
-			if (tempPath == null || tempPath.isEmpty() || !new File(tempPath).exists()) {
+			if (tempPath == null || tempPath.isEmpty()
+					|| !new File(tempPath).exists()) {
 				LOGGER.warn("Temporary directory can't be found. Using /tmp");
 				tempPath = "/tmp";
 			}
@@ -588,16 +669,17 @@
 				tempPath = tempPath.substring(0, tempPath.length() - 1);
 
 			tempDir = new File(tempPath);
-			
-			if (!tempDir.exists()) throw new IllegalStateException("Temp direcotory can't be determined."); 
+
+			if (!tempDir.exists())
+				throw new IllegalStateException(
+						"Temp direcotory can't be determined.");
 		}
 
 		return tempDir;
 	}
 
-
 	/**
-	 * Test whether it is possible to access the given URL. 
+	 * Test whether it is possible to access the given URL.
 	 */
 	public static boolean urlExists(final URL url) {
 		try {
@@ -620,9 +702,45 @@
 	public static String readFileAsString(File file) throws java.io.IOException {
 		byte[] buffer = new byte[(int) file.length()];
 		FileInputStream f = new FileInputStream(file);
-		f.read(buffer);
-		return new String(buffer);
+		try {
+			f.read(buffer);
+			return new String(buffer);
+		} finally {
+			f.close();
+		}
 	}
 
+	/**
+	 * @return a {@link String} with the content of the {@link URL}. Do not use
+	 *         this on long files! Returns <code>null</code> if an erro occured.
+	 */
+	public static String readURLasString(URL url) {
+		try {
 
+			InputStream openStream = url.openStream();
+			try {
+
+				InputStreamReader inStream = new InputStreamReader(openStream);
+				try {
+
+					BufferedReader inReader = new BufferedReader(inStream);
+					try {
+						String content = inReader.readLine();
+						return content;
+					} finally {
+						inReader.close();
+					}
+
+				} finally {
+					inStream.close();
+				}
+			} finally {
+				openStream.close();
+			}
+		} catch (IOException e) {
+			LOGGER.error("getURLasString " + url, e);
+		}
+		return null;
+	}
+
 }



More information about the Schmitzm-commits mailing list