/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.streaming; import java.io.*; import java.util.*; import java.util.Map.Entry; /** * Maps a relative pathname to an absolute pathname using the * PATH enviroment. */ public class PathFinder { String pathenv; // a string of pathnames String pathSep; // the path seperator String fileSep; // the file seperator in a directory /** * Construct a PathFinder object using the path from * java.class.path */ public PathFinder() { pathenv = System.getProperty("java.class.path"); pathSep = System.getProperty("path.separator"); fileSep = System.getProperty("file.separator"); } /** * Construct a PathFinder object using the path from * the specified system environment variable. */ public PathFinder(String envpath) { pathenv = System.getenv(envpath); pathSep = System.getProperty("path.separator"); fileSep = System.getProperty("file.separator"); } /** * Appends the specified component to the path list */ public void prependPathComponent(String str) { pathenv = str + pathSep + pathenv; } /** * Returns the full path name of this file if it is listed in the * path */ public File getAbsolutePath(String filename) { if (pathenv == null || pathSep == null || fileSep == null) { return null; } int val = -1; String classvalue = pathenv + pathSep; while (((val = classvalue.indexOf(pathSep)) >= 0) && classvalue.length() > 0) { // // Extract each entry from the pathenv // String entry = classvalue.substring(0, val).trim(); File f = new File(entry); try { if (f.isDirectory()) { // // this entry in the pathenv is a directory. // see if the required file is in this directory // f = new File(entry + fileSep + filename); } // // see if the filename matches and we can read it // if (f.isFile() && f.canRead()) { return f; } } catch (Exception exp){ } classvalue = classvalue.substring(val+1).trim(); } return null; } /** * prints all environment variables for this process */ private static void printEnvVariables() { System.out.println("Environment Variables: "); Map<String,String> map = System.getenv(); Set<Entry<String, String>> entrySet = map.entrySet(); for(Entry<String, String> entry : entrySet) { System.out.println(entry.getKey() + " = " + entry.getValue()); } } /** * prints all system properties for this process */ private static void printSystemProperties() { System.out.println("System properties: "); java.util.Properties p = System.getProperties(); java.util.Enumeration keys = p.keys(); while(keys.hasMoreElements()) { String thiskey = (String)keys.nextElement(); String value = p.getProperty(thiskey); System.out.println(thiskey + " = " + value); } } public static void main(String args[]) throws IOException { if (args.length < 1) { System.out.println("Usage: java PathFinder <filename>"); System.exit(1); } PathFinder finder = new PathFinder("PATH"); File file = finder.getAbsolutePath(args[0]); if (file != null) { System.out.println("Full path name = " + file.getCanonicalPath()); } } }