// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
/**
* Contains utility methods for dealing with resource files packaged within the application.
*
* @author Brett Henderson
*/
public class ResourceFileManager {
/**
* Copies a packaged resource to a file on the file system.
*
* @param callingClass
* The calling class is used to load the resource, this allows
* resources to be loaded with paths relative to the caller.
* @param sourceResource
* The input resource.
* @param destinationFile
* The output file.
*/
public void copyResourceToFile(Class<?> callingClass, String sourceResource, File destinationFile) {
byte[] buffer = new byte[4096];
try (InputStream is = callingClass.getResourceAsStream(sourceResource)) {
if (is == null) {
throw new FileNotFoundException("Could not find " + sourceResource);
}
try (OutputStream os = new FileOutputStream(destinationFile)) {
while (true) {
int bytesRead = is.read(buffer);
// Stop reading if no more data is available.
if (bytesRead < 0) {
break;
}
os.write(buffer, 0, bytesRead);
}
}
} catch (IOException e) {
throw new OsmosisRuntimeException(
"Unable to copy resource " + sourceResource + " to file " + destinationFile);
}
}
}