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

网格计算

开发平台:

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.util;
  19. import java.io.*;
  20. import java.util.Set;
  21. import java.util.HashSet;
  22. // Keeps track of which datanodes are allowed to connect to the namenode.
  23. public class HostsFileReader {
  24.   private Set<String> includes;
  25.   private Set<String> excludes;
  26.   private String includesFile;
  27.   private String excludesFile;
  28.   public HostsFileReader(String inFile, 
  29.                          String exFile) throws IOException {
  30.     includes = new HashSet<String>();
  31.     excludes = new HashSet<String>();
  32.     includesFile = inFile;
  33.     excludesFile = exFile;
  34.     refresh();
  35.   }
  36.   private void readFileToSet(String filename, Set<String> set) throws IOException {
  37.     FileInputStream fis = new FileInputStream(new File(filename));
  38.     BufferedReader reader = null;
  39.     try {
  40.       reader = new BufferedReader(new InputStreamReader(fis));
  41.       String line;
  42.       while ((line = reader.readLine()) != null) {
  43.         String[] nodes = line.split("[ tnfr]+");
  44.         if (nodes != null) {
  45.           for (int i = 0; i < nodes.length; i++) {
  46.             if (!nodes[i].equals("")) {
  47.               set.add(nodes[i]);  // might need to add canonical name
  48.             }
  49.           }
  50.         }
  51.       }   
  52.     } finally {
  53.       if (reader != null) {
  54.         reader.close();
  55.       }
  56.       fis.close();
  57.     }  
  58.   }
  59.   public synchronized void refresh() throws IOException {
  60.     includes.clear();
  61.     excludes.clear();
  62.     
  63.     if (!includesFile.equals("")) {
  64.       readFileToSet(includesFile, includes);
  65.     }
  66.     if (!excludesFile.equals("")) {
  67.       readFileToSet(excludesFile, excludes);
  68.     }
  69.   }
  70.   public Set<String> getHosts() {
  71.     return includes;
  72.   }
  73.   public Set<String> getExcludedHosts() {
  74.     return excludes;
  75.   }
  76.   public synchronized void setIncludesFile(String includesFile) {
  77.     this.includesFile = includesFile;
  78.   }
  79.   
  80.   public synchronized void setExcludesFile(String excludesFile) {
  81.     this.excludesFile = excludesFile;
  82.   }
  83.   public synchronized void updateFileNames(String includesFile, 
  84.                                            String excludesFile) 
  85.                                            throws IOException {
  86.     setIncludesFile(includesFile);
  87.     setExcludesFile(excludesFile);
  88.   }
  89. }