PathFinder.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.streaming;
  19. import java.io.*;
  20. import java.util.*;
  21. import java.util.Map.Entry;
  22. /**
  23.  * Maps a relative pathname to an absolute pathname using the
  24.  * PATH enviroment.
  25.  */
  26. public class PathFinder
  27. {
  28.   String pathenv;        // a string of pathnames
  29.   String pathSep;        // the path seperator
  30.   String fileSep;        // the file seperator in a directory
  31.   /**
  32.    * Construct a PathFinder object using the path from
  33.    * java.class.path
  34.    */
  35.   public PathFinder()
  36.   {
  37.     pathenv = System.getProperty("java.class.path");
  38.     pathSep = System.getProperty("path.separator");
  39.     fileSep = System.getProperty("file.separator");
  40.   }
  41.   /**
  42.    * Construct a PathFinder object using the path from
  43.    * the specified system environment variable.
  44.    */
  45.   public PathFinder(String envpath)
  46.   {
  47.     pathenv = System.getenv(envpath);
  48.     pathSep = System.getProperty("path.separator");
  49.     fileSep = System.getProperty("file.separator");
  50.   }
  51.   /**
  52.    * Appends the specified component to the path list
  53.    */
  54.   public void prependPathComponent(String str)
  55.   {
  56.     pathenv = str + pathSep + pathenv;
  57.   }
  58.   /**
  59.    * Returns the full path name of this file if it is listed in the
  60.    * path
  61.    */
  62.   public File getAbsolutePath(String filename)
  63.   {
  64.     if (pathenv == null || pathSep == null  || fileSep == null)
  65.       {
  66.         return null;
  67.       }
  68.     int     val = -1;
  69.     String    classvalue = pathenv + pathSep;
  70.     while (((val = classvalue.indexOf(pathSep)) >= 0) &&
  71.            classvalue.length() > 0) {
  72.       //
  73.       // Extract each entry from the pathenv
  74.       //
  75.       String entry = classvalue.substring(0, val).trim();
  76.       File f = new File(entry);
  77.       try {
  78.         if (f.isDirectory()) {
  79.           //
  80.           // this entry in the pathenv is a directory.
  81.           // see if the required file is in this directory
  82.           //
  83.           f = new File(entry + fileSep + filename);
  84.         }
  85.         //
  86.         // see if the filename matches and  we can read it
  87.         //
  88.         if (f.isFile() && f.canRead()) {
  89.           return f;
  90.         }
  91.       } catch (Exception exp){ }
  92.       classvalue = classvalue.substring(val+1).trim();
  93.     }
  94.     return null;
  95.   }
  96.   /**
  97.    * prints all environment variables for this process
  98.    */
  99.   private static void printEnvVariables() {
  100.     System.out.println("Environment Variables: ");
  101.     Map<String,String> map = System.getenv();
  102.     Set<Entry<String, String>> entrySet = map.entrySet();
  103.     for(Entry<String, String> entry : entrySet) {
  104.       System.out.println(entry.getKey() + " = " + entry.getValue());
  105.     }
  106.   }
  107.   /**
  108.    * prints all system properties for this process
  109.    */
  110.   private static void printSystemProperties() {
  111.     System.out.println("System properties: ");
  112.     java.util.Properties p = System.getProperties();
  113.     java.util.Enumeration keys = p.keys();
  114.     while(keys.hasMoreElements()) {
  115.       String thiskey = (String)keys.nextElement();
  116.       String value = p.getProperty(thiskey);
  117.       System.out.println(thiskey + " = " + value);
  118.     }
  119.   }
  120.   public static void main(String args[]) throws IOException {
  121.     if (args.length < 1) {
  122.       System.out.println("Usage: java PathFinder <filename>");
  123.       System.exit(1);
  124.     }
  125.     PathFinder finder = new PathFinder("PATH");
  126.     File file = finder.getAbsolutePath(args[0]);
  127.     if (file != null) {
  128.       System.out.println("Full path name = " + file.getCanonicalPath());
  129.     }
  130.   }
  131. }