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.
/**
* 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.
Params: - file – file whose parent directories (if any) should be created
Returns: true
if either no parents were specified, or if all parent directories were created successfully; false
otherwise
/**
* 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
}
}
}
}
}