| /** |
| * 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()); |
| } |
| } |
| } |