ch.qos.logback.core.util.FileUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of virtdata-lib-curves4 Show documentation
Show all versions of virtdata-lib-curves4 Show documentation
Statistical sampling library for use in virtualdataset libraries, based on apache commons math 4
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.util;
import ch.qos.logback.core.Context;
import ch.qos.logback.core.rolling.RolloverFailure;
import ch.qos.logback.core.spi.ContextAwareBase;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class FileUtil extends ContextAwareBase {
public FileUtil(Context context) {
setContext(context);
}
public static URL fileToURL(File file) {
try {
return file.toURI().toURL();
} catch (MalformedURLException e) {
throw new RuntimeException("Unexpected exception on file [" + file + "]", e);
}
}
/**
* Creates the parent directories of a file. If parent directories not
* specified in file's path, then nothing is done and this returns
* gracefully.
*
* @param file file whose parent directories (if any) should be created
* @return {@code true} if either no parents were specified, or if all
* parent directories were created successfully; {@code false} otherwise
*/
static public boolean createMissingParentDirectories(File file) {
File parent = file.getParentFile();
if (parent == null) {
// Parent directory not specified, therefore it's a request to
// create nothing. Done! ;)
return true;
}
// File.mkdirs() creates the parent directories only if they don't
// already exist; and it's okay if they do.
parent.mkdirs();
return parent.exists();
}
public String resourceAsString(ClassLoader classLoader, String resourceName) {
URL url = classLoader.getResource(resourceName);
if (url == null) {
addError("Failed to find resource [" + resourceName + "]");
return null;
}
InputStreamReader isr = null;
try {
URLConnection urlConnection = url.openConnection();
urlConnection.setUseCaches(false);
isr = new InputStreamReader(urlConnection.getInputStream());
char[] buf = new char[128];
StringBuilder builder = new StringBuilder();
int count = -1;
while ((count = isr.read(buf, 0, buf.length)) != -1) {
builder.append(buf, 0, count);
}
return builder.toString();
} catch (IOException e) {
addError("Failed to open " + resourceName, e);
} finally {
if (isr != null) {
try {
isr.close();
} catch (IOException e) {
// ignore
}
}
}
return null;
}
static final int BUF_SIZE = 32 * 1024;
public void copy(String src, String destination) throws RolloverFailure {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(src));
bos = new BufferedOutputStream(new FileOutputStream(destination));
byte[] inbuf = new byte[BUF_SIZE];
int n;
while ((n = bis.read(inbuf)) != -1) {
bos.write(inbuf, 0, n);
}
bis.close();
bis = null;
bos.close();
bos = null;
} catch (IOException ioe) {
String msg = "Failed to copy [" + src + "] to [" + destination + "]";
addError(msg, ioe);
throw new RolloverFailure(msg);
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
// ignore
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
// ignore
}
}
}
}
}