view src/main/java/org/monetdb/util/Extract.java @ 937:d416e9b6b3d0

Update Copyright year.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 02 Jan 2025 13:27:58 +0100 (3 months ago)
parents e890195256ac
children
line wrap: on
line source
/*
 * SPDX-License-Identifier: MPL-2.0
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0.  If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * Copyright 2024, 2025 MonetDB Foundation;
 * Copyright August 2008 - 2023 MonetDB B.V.;
 * Copyright 1997 - July 2008 CWI.
 */

package org.monetdb.util;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

/**
 * This file contains a function to extract files from its including Jar
 * package.
 *
 * @author Ying Zhang "Y.Zhang@cwi.nl"
 * @version 0.1
 */
public class Extract {
	private static final int DEFAULT_BUFSIZE = 16386;

	public Extract() {}

	/**
	 * Extracts a file from the Jar package which includes this class to
	 * the given destination
	 * @param fromFile The file to extract, including it absolute path
	 * inside its including Jar package.
	 * @param toFile Destination for the extracted file
	 * @throws FileNotFoundException If the file to extract can not be
	 * found in its including Jar package.
	 * @throws IOException If any error happens during
	 * creating/reading/writing files.
	 */
	public static void extractFile(final String fromFile, final String toFile)
		throws FileNotFoundException, IOException
	{
		final java.io.InputStream is = new Extract().getClass().getResourceAsStream(fromFile);
		if (is == null) {
			throw new FileNotFoundException("File " + fromFile +
					" does not exist in the JAR package.");
		}

		final BufferedReader reader = new BufferedReader(new java.io.InputStreamReader(is));
		final FileWriter writer = new FileWriter(toFile, false);
		final char[] cbuf = new char[DEFAULT_BUFSIZE];
		int ret = reader.read(cbuf, 0, DEFAULT_BUFSIZE);
		while (ret > 0) {
			writer.write(cbuf, 0, ret);
			ret = reader.read(cbuf, 0, DEFAULT_BUFSIZE);
		}
		reader.close();
		writer.close();
	}
}