/*************************************************************************************************** * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. All rights reserved. This program and the * accompanying materials are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: Gorkem Ercan - initial API and implementation * **************************************************************************************************/ package org.eclipse.jst.server.generic.internal.core.util; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import org.eclipse.core.runtime.FileLocator; /** * Utilities for file operations. * * @author Gorkem Ercan */ public class FileUtil { /** * Returns a resolved equivalent of url, use with the * platform relative urls * * @param url * @return URL */ public static URL resolveURL(URL url){ try{ return FileLocator.resolve(url); }catch(IOException e){ //ignore } return null; } /** * Create a temporary file * @param name * @param dir * @return file */ public static File createTempFile(String name, String dir){ if(name==null || dir == null) return null; File temp=null; String filePath; filePath = name.replace('/', File.separatorChar); if (filePath.startsWith(File.separator)) filePath = filePath.substring(1); temp = new File(dir, filePath); verifyPath(temp,true); temp.deleteOnExit(); return temp; } /** * Copies a file * @param input * @param output * @throws IOException */ public static void copy(InputStream input, OutputStream output) throws IOException{ byte[] buf = new byte[4096]; int len = input.read(buf); while(len!=-1){ output.write(buf,0,len); len= input.read(buf); } } private static void verifyPath(File path, boolean isFile) { // if we are expecting a file back off 1 path element if (isFile) { if (path.getAbsolutePath().endsWith(File.separator)) { // make sure this is a file path = path.getParentFile(); isFile = false; } } // already exists ... just return if (path.exists()) return; // does not exist ... ensure parent exists File parent = path.getParentFile(); verifyPath(parent, false); // ensure directories are made. Mark files or directories for deletion if (!isFile) path.mkdir(); path.deleteOnExit(); } /** * Resolves a URL to a file. * * @param url * @return file */ public static File resolveFile(URL url){ try { URL resolvedUrl = resolveURL(url); URI uri = new URI(resolvedUrl.getProtocol(), resolvedUrl.getHost(),resolvedUrl.getPath(), resolvedUrl.getQuery()); return new File(uri); } catch (URISyntaxException e) { //ignore } return null; } }