View Javadoc
1   package org.apache.maven.shared.utils;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.io.FileInputStream;
24  import java.io.IOException;
25  import java.io.InputStream;
26  import java.net.URL;
27  import java.util.Properties;
28  
29  import javax.annotation.Nonnull;
30  import javax.annotation.Nullable;
31  
32  /**
33   * Static utility methods for loading properties.
34   */
35  public class PropertyUtils
36  {
37  
38      /**
39       * The constructor.
40       *
41       * @deprecated This is a utility class with only static methods. Don't create instances of it.
42       */
43      @Deprecated
44      public PropertyUtils()
45      {
46      }
47  
48      /**
49       * @param url the URL which should be used to load the properties
50       * @return the loaded properties
51       * @deprecated use {@link #loadOptionalProperties(java.net.URL)} instead. This method should not
52       *             be used as it suppresses exceptions silently when loading properties fails and returns {@code null}
53       *             instead of an empty {@code Properties} instance when the given {@code URL} is {@code null}.
54       */
55      @Deprecated
56      public static java.util.Properties loadProperties( @Nonnull URL url )
57      {
58          try ( InputStream in = url.openStream() )
59          {
60              return loadProperties( in );
61          }
62          catch ( Exception e )
63          {
64              // ignore
65          }
66          return null;
67      }
68  
69      /**
70       * @param file the file from which the properties will be loaded
71       * @return the loaded properties
72       * @deprecated use {@link #loadOptionalProperties(java.io.File)} instead. This method should not
73       *             be used as it suppresses exceptions silently when loading properties fails and returns {@code null}
74       *             instead of an empty {@code Properties} instance when the given {@code File} is {@code null}.
75       */
76      @Deprecated
77      public static Properties loadProperties( @Nonnull File file )
78      {
79          try  ( InputStream in = new FileInputStream( file ) )
80          {
81              return loadProperties( in );
82          }
83          catch ( Exception e )
84          {
85              // ignore
86          }
87          return null;
88      }
89  
90      /**
91       * Loads {@code Properties} from an {@code InputStream} and closes the stream.
92       * In a future release, this will no longer close the stream, so callers
93       * should close the stream themselves.  
94       * 
95       * @param is {@link InputStream}
96       * @return the loaded properties
97       * @deprecated use {@link #loadOptionalProperties(java.io.InputStream)} instead. This method
98       *             should not be used as it suppresses exceptions silently when loading properties fails.
99       */
100     @Deprecated
101     public static Properties loadProperties( @Nullable InputStream is )
102     {
103         try
104         {
105             Properties result = new Properties();
106             if ( is != null )
107             {
108                 try ( InputStream in = is )
109                 {
110                     result.load( in );
111                 }
112                 catch ( IOException e )
113                 {
114                     // ignore
115                 }
116             }
117             return result;
118         }
119         catch ( Exception e )
120         {
121             // ignore
122         }
123         return null;
124     }
125 
126     /**
127      * Loads {@code Properties} from a given {@code URL}.
128      * <p>
129      * If the given {@code URL} is {@code null} or the properties can't be read, an empty properties object is returned.
130      * </p>
131      *
132      * @param url the {@code URL} of the properties resource to load or {@code null}
133      * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
134      * @since 3.1.0
135      */
136     @Nonnull
137     public static Properties loadOptionalProperties( final @Nullable URL url )
138     {
139 
140         Properties properties = new Properties();
141         if ( url != null )
142         {
143             try ( InputStream in = url.openStream() )
144             {
145                 properties.load( in );
146             }
147             catch ( IllegalArgumentException | IOException ex )
148             {
149                 // ignore and return empty properties
150             }
151         }
152         return properties;
153     }
154 
155     /**
156      * Loads {@code Properties} from a {@code File}.
157      * <p>
158      * If the given {@code File} is {@code null} or the properties file can't be read, an empty properties object is
159      * returned.
160      * </p>
161      *
162      * @param file the {@code File} of the properties resource to load or {@code null}
163      * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
164      * @since 3.1.0
165      */
166     @Nonnull
167     public static Properties loadOptionalProperties( final @Nullable File file )
168     {
169         Properties properties = new Properties();
170         if ( file != null )
171         {
172             try ( InputStream in = new FileInputStream( file ) )
173             {
174                 properties.load( in );
175             }
176             catch ( IllegalArgumentException | IOException ex )
177             {
178                 // ignore and return empty properties
179             }
180         }
181 
182         return properties;
183 
184     }
185 
186     /**
187      * Loads {@code Properties} from an {@code InputStream} and closes the stream.
188      * If the given {@code InputStream} is {@code null} or the properties can't be read, an empty properties object is
189      * returned. In a future release, this will no longer close the stream, so callers
190      * should close the stream themselves.  
191      *
192      * @param inputStream the properties resource to load or {@code null}
193      * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
194      * @since 3.1.0
195      */
196     @Nonnull
197     public static Properties loadOptionalProperties( final @Nullable InputStream inputStream )
198     {
199 
200         Properties properties = new Properties();
201 
202         if ( inputStream != null )
203         {
204             try ( InputStream in = inputStream ) // reassign inputStream to autoclose
205             {
206                 properties.load( in );
207             }
208             catch ( IllegalArgumentException | IOException ex )
209             {
210                 // ignore and return empty properties
211             }
212         }
213 
214         return properties;
215 
216     }
217 
218 }