You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2013/05/08 21:32:41 UTC

svn commit: r861378 [41/41] - in /websites/production/commons/content/proper/commons-io: ./ apidocs/ apidocs/org/apache/commons/io/ apidocs/src-html/org/apache/commons/io/ cobertura/ xref/org/apache/commons/io/

Modified: websites/production/commons/content/proper/commons-io/xref/org/apache/commons/io/FileUtils.html
==============================================================================
--- websites/production/commons/content/proper/commons-io/xref/org/apache/commons/io/FileUtils.html (original)
+++ websites/production/commons/content/proper/commons-io/xref/org/apache/commons/io/FileUtils.html Wed May  8 19:32:39 2013
@@ -81,7 +81,7 @@
 <a class="jxr_linenumber" name="71" href="#71">71</a>  <em class="jxr_javadoccomment"> * &lt;p&gt;</em>
 <a class="jxr_linenumber" name="72" href="#72">72</a>  <em class="jxr_javadoccomment"> * Origin of code: Excalibur, Alexandria, Commons-Utils</em>
 <a class="jxr_linenumber" name="73" href="#73">73</a>  <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="74" href="#74">74</a>  <em class="jxr_javadoccomment"> * @version $Id: FileUtils.java 1480300 2013-05-08 14:36:32Z ggregory $</em>
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <em class="jxr_javadoccomment"> * @version $Id: FileUtils.java 1480346 2013-05-08 16:45:03Z ggregory $</em>
 <a class="jxr_linenumber" name="75" href="#75">75</a>  <em class="jxr_javadoccomment"> */</em>
 <a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/commons/io/FileUtils.html">FileUtils</a> {
 <a class="jxr_linenumber" name="77" href="#77">77</a>  
@@ -1517,1541 +1517,1538 @@
 <a class="jxr_linenumber" name="1507" href="#1507">1507</a> <em class="jxr_javadoccomment">     * @since 2.0</em>
 <a class="jxr_linenumber" name="1508" href="#1508">1508</a> <em class="jxr_javadoccomment">     */</em>
 <a class="jxr_linenumber" name="1509" href="#1509">1509</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> copyInputStreamToFile(<strong class="jxr_keyword">final</strong> InputStream source, <strong class="jxr_keyword">final</strong> File destination) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1510" href="#1510">1510</a>         copyInputStreamToFile(source, destination, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="1511" href="#1511">1511</a>     }
-<a class="jxr_linenumber" name="1512" href="#1512">1512</a> 
-<a class="jxr_linenumber" name="1513" href="#1513">1513</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1514" href="#1514">1514</a> <em class="jxr_javadoccomment">     * Copies bytes from an {@link InputStream} &lt;code&gt;source&lt;/code&gt; to a file</em>
-<a class="jxr_linenumber" name="1515" href="#1515">1515</a> <em class="jxr_javadoccomment">     * &lt;code&gt;destination&lt;/code&gt;. The directories up to &lt;code&gt;destination&lt;/code&gt;</em>
-<a class="jxr_linenumber" name="1516" href="#1516">1516</a> <em class="jxr_javadoccomment">     * will be created if they don't already exist. &lt;code&gt;destination&lt;/code&gt;</em>
-<a class="jxr_linenumber" name="1517" href="#1517">1517</a> <em class="jxr_javadoccomment">     * will be overwritten if it already exists.</em>
-<a class="jxr_linenumber" name="1518" href="#1518">1518</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1519" href="#1519">1519</a> <em class="jxr_javadoccomment">     * @param source  the &lt;code&gt;InputStream&lt;/code&gt; to copy bytes from, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1520" href="#1520">1520</a> <em class="jxr_javadoccomment">     * @param destination  the non-directory &lt;code&gt;File&lt;/code&gt; to write bytes to</em>
-<a class="jxr_linenumber" name="1521" href="#1521">1521</a> <em class="jxr_javadoccomment">     *  (possibly overwriting), must not be {@code null}</em>
-<a class="jxr_linenumber" name="1522" href="#1522">1522</a> <em class="jxr_javadoccomment">     * @param closeSource If true, closes the &lt;code&gt;source&lt;/code&gt;</em>
-<a class="jxr_linenumber" name="1523" href="#1523">1523</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; is a directory</em>
-<a class="jxr_linenumber" name="1524" href="#1524">1524</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; cannot be written</em>
-<a class="jxr_linenumber" name="1525" href="#1525">1525</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; needs creating but can't be</em>
-<a class="jxr_linenumber" name="1526" href="#1526">1526</a> <em class="jxr_javadoccomment">     * @throws IOException if an IO error occurs during copying</em>
-<a class="jxr_linenumber" name="1527" href="#1527">1527</a> <em class="jxr_javadoccomment">     * @since 2.5</em>
-<a class="jxr_linenumber" name="1528" href="#1528">1528</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1529" href="#1529">1529</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> copyInputStreamToFile(<strong class="jxr_keyword">final</strong> InputStream source, <strong class="jxr_keyword">final</strong> File destination, <strong class="jxr_keyword">boolean</strong> closeSource) 
-<a class="jxr_linenumber" name="1530" href="#1530">1530</a>             <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1531" href="#1531">1531</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1532" href="#1532">1532</a>             <strong class="jxr_keyword">final</strong> FileOutputStream output = openOutputStream(destination);
-<a class="jxr_linenumber" name="1533" href="#1533">1533</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1534" href="#1534">1534</a>                 IOUtils.copy(source, output);
-<a class="jxr_linenumber" name="1535" href="#1535">1535</a>                 output.close(); <em class="jxr_comment">// don't swallow close Exception if copy completes normally</em>
-<a class="jxr_linenumber" name="1536" href="#1536">1536</a>             } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1537" href="#1537">1537</a>                 IOUtils.closeQuietly(output);
-<a class="jxr_linenumber" name="1538" href="#1538">1538</a>             }
-<a class="jxr_linenumber" name="1539" href="#1539">1539</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1540" href="#1540">1540</a>             <strong class="jxr_keyword">if</strong> (closeSource) {
-<a class="jxr_linenumber" name="1541" href="#1541">1541</a>                 IOUtils.closeQuietly(source);
-<a class="jxr_linenumber" name="1542" href="#1542">1542</a>             }
-<a class="jxr_linenumber" name="1543" href="#1543">1543</a>         }
-<a class="jxr_linenumber" name="1544" href="#1544">1544</a>     }
-<a class="jxr_linenumber" name="1545" href="#1545">1545</a> 
-<a class="jxr_linenumber" name="1546" href="#1546">1546</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="1547" href="#1547">1547</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1548" href="#1548">1548</a> <em class="jxr_javadoccomment">     * Deletes a directory recursively.</em>
-<a class="jxr_linenumber" name="1549" href="#1549">1549</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1550" href="#1550">1550</a> <em class="jxr_javadoccomment">     * @param directory  directory to delete</em>
-<a class="jxr_linenumber" name="1551" href="#1551">1551</a> <em class="jxr_javadoccomment">     * @throws IOException in case deletion is unsuccessful</em>
-<a class="jxr_linenumber" name="1552" href="#1552">1552</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1553" href="#1553">1553</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> deleteDirectory(<strong class="jxr_keyword">final</strong> File directory) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1554" href="#1554">1554</a>         <strong class="jxr_keyword">if</strong> (!directory.exists()) {
-<a class="jxr_linenumber" name="1555" href="#1555">1555</a>             <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="1556" href="#1556">1556</a>         }
-<a class="jxr_linenumber" name="1557" href="#1557">1557</a> 
-<a class="jxr_linenumber" name="1558" href="#1558">1558</a>         <strong class="jxr_keyword">if</strong> (!isSymlink(directory)) {
-<a class="jxr_linenumber" name="1559" href="#1559">1559</a>             cleanDirectory(directory);
-<a class="jxr_linenumber" name="1560" href="#1560">1560</a>         }
-<a class="jxr_linenumber" name="1561" href="#1561">1561</a> 
-<a class="jxr_linenumber" name="1562" href="#1562">1562</a>         <strong class="jxr_keyword">if</strong> (!directory.delete()) {
-<a class="jxr_linenumber" name="1563" href="#1563">1563</a>             <strong class="jxr_keyword">final</strong> String message =
-<a class="jxr_linenumber" name="1564" href="#1564">1564</a>                 <span class="jxr_string">"Unable to delete directory "</span> + directory + <span class="jxr_string">"."</span>;
-<a class="jxr_linenumber" name="1565" href="#1565">1565</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(message);
-<a class="jxr_linenumber" name="1566" href="#1566">1566</a>         }
-<a class="jxr_linenumber" name="1567" href="#1567">1567</a>     }
-<a class="jxr_linenumber" name="1568" href="#1568">1568</a> 
-<a class="jxr_linenumber" name="1569" href="#1569">1569</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1570" href="#1570">1570</a> <em class="jxr_javadoccomment">     * Deletes a file, never throwing an exception. If file is a directory, delete it and all sub-directories.</em>
-<a class="jxr_linenumber" name="1571" href="#1571">1571</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1572" href="#1572">1572</a> <em class="jxr_javadoccomment">     * The difference between File.delete() and this method are:</em>
-<a class="jxr_linenumber" name="1573" href="#1573">1573</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;</em>
-<a class="jxr_linenumber" name="1574" href="#1574">1574</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A directory to be deleted does not have to be empty.&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1575" href="#1575">1575</a> <em class="jxr_javadoccomment">     * &lt;li&gt;No exceptions are thrown when a file or directory cannot be deleted.&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1576" href="#1576">1576</a> <em class="jxr_javadoccomment">     * &lt;/ul&gt;</em>
-<a class="jxr_linenumber" name="1577" href="#1577">1577</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1578" href="#1578">1578</a> <em class="jxr_javadoccomment">     * @param file  file or directory to delete, can be {@code null}</em>
-<a class="jxr_linenumber" name="1579" href="#1579">1579</a> <em class="jxr_javadoccomment">     * @return {@code true} if the file or directory was deleted, otherwise</em>
-<a class="jxr_linenumber" name="1580" href="#1580">1580</a> <em class="jxr_javadoccomment">     * {@code false}</em>
-<a class="jxr_linenumber" name="1581" href="#1581">1581</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1582" href="#1582">1582</a> <em class="jxr_javadoccomment">     * @since 1.4</em>
-<a class="jxr_linenumber" name="1583" href="#1583">1583</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1584" href="#1584">1584</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> deleteQuietly(<strong class="jxr_keyword">final</strong> File file) {
-<a class="jxr_linenumber" name="1585" href="#1585">1585</a>         <strong class="jxr_keyword">if</strong> (file == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1586" href="#1586">1586</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1587" href="#1587">1587</a>         }
-<a class="jxr_linenumber" name="1588" href="#1588">1588</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1589" href="#1589">1589</a>             <strong class="jxr_keyword">if</strong> (file.isDirectory()) {
-<a class="jxr_linenumber" name="1590" href="#1590">1590</a>                 cleanDirectory(file);
-<a class="jxr_linenumber" name="1591" href="#1591">1591</a>             }
-<a class="jxr_linenumber" name="1592" href="#1592">1592</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ignored) {
-<a class="jxr_linenumber" name="1593" href="#1593">1593</a>         }
-<a class="jxr_linenumber" name="1594" href="#1594">1594</a> 
-<a class="jxr_linenumber" name="1595" href="#1595">1595</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1596" href="#1596">1596</a>             <strong class="jxr_keyword">return</strong> file.delete();
-<a class="jxr_linenumber" name="1597" href="#1597">1597</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ignored) {
-<a class="jxr_linenumber" name="1598" href="#1598">1598</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1599" href="#1599">1599</a>         }
-<a class="jxr_linenumber" name="1600" href="#1600">1600</a>     }
-<a class="jxr_linenumber" name="1601" href="#1601">1601</a> 
-<a class="jxr_linenumber" name="1602" href="#1602">1602</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1603" href="#1603">1603</a> <em class="jxr_javadoccomment">     * Determines whether the {@code parent} directory contains the {@code child} element (a file or directory).</em>
-<a class="jxr_linenumber" name="1604" href="#1604">1604</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1605" href="#1605">1605</a> <em class="jxr_javadoccomment">     * Files are normalized before comparison.</em>
-<a class="jxr_linenumber" name="1606" href="#1606">1606</a> <em class="jxr_javadoccomment">     * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="1607" href="#1607">1607</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1608" href="#1608">1608</a> <em class="jxr_javadoccomment">     * Edge cases:</em>
-<a class="jxr_linenumber" name="1609" href="#1609">1609</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;</em>
-<a class="jxr_linenumber" name="1610" href="#1610">1610</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A {@code directory} must not be null: if null, throw IllegalArgumentException&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1611" href="#1611">1611</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A {@code directory} must be a directory: if not a directory, throw IllegalArgumentException&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1612" href="#1612">1612</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A directory does not contain itself: return false&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1613" href="#1613">1613</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A null child file is not contained in any parent: return false&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="1614" href="#1614">1614</a> <em class="jxr_javadoccomment">     * &lt;/ul&gt;</em>
-<a class="jxr_linenumber" name="1615" href="#1615">1615</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1616" href="#1616">1616</a> <em class="jxr_javadoccomment">     * @param directory</em>
-<a class="jxr_linenumber" name="1617" href="#1617">1617</a> <em class="jxr_javadoccomment">     *            the file to consider as the parent.</em>
-<a class="jxr_linenumber" name="1618" href="#1618">1618</a> <em class="jxr_javadoccomment">     * @param child</em>
-<a class="jxr_linenumber" name="1619" href="#1619">1619</a> <em class="jxr_javadoccomment">     *            the file to consider as the child.</em>
-<a class="jxr_linenumber" name="1620" href="#1620">1620</a> <em class="jxr_javadoccomment">     * @return true is the candidate leaf is under by the specified composite. False otherwise.</em>
-<a class="jxr_linenumber" name="1621" href="#1621">1621</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
-<a class="jxr_linenumber" name="1622" href="#1622">1622</a> <em class="jxr_javadoccomment">     *             if an IO error occurs while checking the files.</em>
-<a class="jxr_linenumber" name="1623" href="#1623">1623</a> <em class="jxr_javadoccomment">     * @since 2.2</em>
-<a class="jxr_linenumber" name="1624" href="#1624">1624</a> <em class="jxr_javadoccomment">     * @see FilenameUtils#directoryContains(String, String)</em>
-<a class="jxr_linenumber" name="1625" href="#1625">1625</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1626" href="#1626">1626</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> directoryContains(<strong class="jxr_keyword">final</strong> File directory, <strong class="jxr_keyword">final</strong> File child) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1627" href="#1627">1627</a> 
-<a class="jxr_linenumber" name="1628" href="#1628">1628</a>         <em class="jxr_comment">// Fail fast against NullPointerException</em>
-<a class="jxr_linenumber" name="1629" href="#1629">1629</a>         <strong class="jxr_keyword">if</strong> (directory == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1630" href="#1630">1630</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Directory must not be null"</span>);
-<a class="jxr_linenumber" name="1631" href="#1631">1631</a>         }
-<a class="jxr_linenumber" name="1632" href="#1632">1632</a> 
-<a class="jxr_linenumber" name="1633" href="#1633">1633</a>         <strong class="jxr_keyword">if</strong> (!directory.isDirectory()) {
-<a class="jxr_linenumber" name="1634" href="#1634">1634</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Not a directory: "</span> + directory);
-<a class="jxr_linenumber" name="1635" href="#1635">1635</a>         }
-<a class="jxr_linenumber" name="1636" href="#1636">1636</a> 
-<a class="jxr_linenumber" name="1637" href="#1637">1637</a>         <strong class="jxr_keyword">if</strong> (child == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1638" href="#1638">1638</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1639" href="#1639">1639</a>         }
-<a class="jxr_linenumber" name="1640" href="#1640">1640</a> 
-<a class="jxr_linenumber" name="1641" href="#1641">1641</a>         <strong class="jxr_keyword">if</strong> (!directory.exists() || !child.exists()) {
-<a class="jxr_linenumber" name="1642" href="#1642">1642</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1643" href="#1643">1643</a>         }
-<a class="jxr_linenumber" name="1644" href="#1644">1644</a> 
-<a class="jxr_linenumber" name="1645" href="#1645">1645</a>         <em class="jxr_comment">// Canonicalize paths (normalizes relative paths)</em>
-<a class="jxr_linenumber" name="1646" href="#1646">1646</a>         <strong class="jxr_keyword">final</strong> String canonicalParent = directory.getCanonicalPath();
-<a class="jxr_linenumber" name="1647" href="#1647">1647</a>         <strong class="jxr_keyword">final</strong> String canonicalChild = child.getCanonicalPath();
+<a class="jxr_linenumber" name="1510" href="#1510">1510</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1511" href="#1511">1511</a>             copyToFile(source, destination);
+<a class="jxr_linenumber" name="1512" href="#1512">1512</a>         } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1513" href="#1513">1513</a>             IOUtils.closeQuietly(source);
+<a class="jxr_linenumber" name="1514" href="#1514">1514</a>         }
+<a class="jxr_linenumber" name="1515" href="#1515">1515</a>     }
+<a class="jxr_linenumber" name="1516" href="#1516">1516</a> 
+<a class="jxr_linenumber" name="1517" href="#1517">1517</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1518" href="#1518">1518</a> <em class="jxr_javadoccomment">     * Copies bytes from an {@link InputStream} &lt;code&gt;source&lt;/code&gt; to a file</em>
+<a class="jxr_linenumber" name="1519" href="#1519">1519</a> <em class="jxr_javadoccomment">     * &lt;code&gt;destination&lt;/code&gt;. The directories up to &lt;code&gt;destination&lt;/code&gt;</em>
+<a class="jxr_linenumber" name="1520" href="#1520">1520</a> <em class="jxr_javadoccomment">     * will be created if they don't already exist. &lt;code&gt;destination&lt;/code&gt;</em>
+<a class="jxr_linenumber" name="1521" href="#1521">1521</a> <em class="jxr_javadoccomment">     * will be overwritten if it already exists.</em>
+<a class="jxr_linenumber" name="1522" href="#1522">1522</a> <em class="jxr_javadoccomment">     * The {@code source} stream is closed.</em>
+<a class="jxr_linenumber" name="1523" href="#1523">1523</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1524" href="#1524">1524</a> <em class="jxr_javadoccomment">     * @param source  the &lt;code&gt;InputStream&lt;/code&gt; to copy bytes from, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1525" href="#1525">1525</a> <em class="jxr_javadoccomment">     * @param destination  the non-directory &lt;code&gt;File&lt;/code&gt; to write bytes to</em>
+<a class="jxr_linenumber" name="1526" href="#1526">1526</a> <em class="jxr_javadoccomment">     *  (possibly overwriting), must not be {@code null}</em>
+<a class="jxr_linenumber" name="1527" href="#1527">1527</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; is a directory</em>
+<a class="jxr_linenumber" name="1528" href="#1528">1528</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; cannot be written</em>
+<a class="jxr_linenumber" name="1529" href="#1529">1529</a> <em class="jxr_javadoccomment">     * @throws IOException if &lt;code&gt;destination&lt;/code&gt; needs creating but can't be</em>
+<a class="jxr_linenumber" name="1530" href="#1530">1530</a> <em class="jxr_javadoccomment">     * @throws IOException if an IO error occurs during copying</em>
+<a class="jxr_linenumber" name="1531" href="#1531">1531</a> <em class="jxr_javadoccomment">     * @since 2.5</em>
+<a class="jxr_linenumber" name="1532" href="#1532">1532</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1533" href="#1533">1533</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> copyToFile(<strong class="jxr_keyword">final</strong> InputStream source, <strong class="jxr_keyword">final</strong> File destination) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1534" href="#1534">1534</a>         <strong class="jxr_keyword">final</strong> FileOutputStream output = openOutputStream(destination);
+<a class="jxr_linenumber" name="1535" href="#1535">1535</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1536" href="#1536">1536</a>             IOUtils.copy(source, output);
+<a class="jxr_linenumber" name="1537" href="#1537">1537</a>             output.close(); <em class="jxr_comment">// don't swallow close Exception if copy completes normally</em>
+<a class="jxr_linenumber" name="1538" href="#1538">1538</a>         } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1539" href="#1539">1539</a>             IOUtils.closeQuietly(output);
+<a class="jxr_linenumber" name="1540" href="#1540">1540</a>         }
+<a class="jxr_linenumber" name="1541" href="#1541">1541</a>     }
+<a class="jxr_linenumber" name="1542" href="#1542">1542</a> 
+<a class="jxr_linenumber" name="1543" href="#1543">1543</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="1544" href="#1544">1544</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1545" href="#1545">1545</a> <em class="jxr_javadoccomment">     * Deletes a directory recursively.</em>
+<a class="jxr_linenumber" name="1546" href="#1546">1546</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1547" href="#1547">1547</a> <em class="jxr_javadoccomment">     * @param directory  directory to delete</em>
+<a class="jxr_linenumber" name="1548" href="#1548">1548</a> <em class="jxr_javadoccomment">     * @throws IOException in case deletion is unsuccessful</em>
+<a class="jxr_linenumber" name="1549" href="#1549">1549</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1550" href="#1550">1550</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> deleteDirectory(<strong class="jxr_keyword">final</strong> File directory) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1551" href="#1551">1551</a>         <strong class="jxr_keyword">if</strong> (!directory.exists()) {
+<a class="jxr_linenumber" name="1552" href="#1552">1552</a>             <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="1553" href="#1553">1553</a>         }
+<a class="jxr_linenumber" name="1554" href="#1554">1554</a> 
+<a class="jxr_linenumber" name="1555" href="#1555">1555</a>         <strong class="jxr_keyword">if</strong> (!isSymlink(directory)) {
+<a class="jxr_linenumber" name="1556" href="#1556">1556</a>             cleanDirectory(directory);
+<a class="jxr_linenumber" name="1557" href="#1557">1557</a>         }
+<a class="jxr_linenumber" name="1558" href="#1558">1558</a> 
+<a class="jxr_linenumber" name="1559" href="#1559">1559</a>         <strong class="jxr_keyword">if</strong> (!directory.delete()) {
+<a class="jxr_linenumber" name="1560" href="#1560">1560</a>             <strong class="jxr_keyword">final</strong> String message =
+<a class="jxr_linenumber" name="1561" href="#1561">1561</a>                 <span class="jxr_string">"Unable to delete directory "</span> + directory + <span class="jxr_string">"."</span>;
+<a class="jxr_linenumber" name="1562" href="#1562">1562</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(message);
+<a class="jxr_linenumber" name="1563" href="#1563">1563</a>         }
+<a class="jxr_linenumber" name="1564" href="#1564">1564</a>     }
+<a class="jxr_linenumber" name="1565" href="#1565">1565</a> 
+<a class="jxr_linenumber" name="1566" href="#1566">1566</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1567" href="#1567">1567</a> <em class="jxr_javadoccomment">     * Deletes a file, never throwing an exception. If file is a directory, delete it and all sub-directories.</em>
+<a class="jxr_linenumber" name="1568" href="#1568">1568</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="1569" href="#1569">1569</a> <em class="jxr_javadoccomment">     * The difference between File.delete() and this method are:</em>
+<a class="jxr_linenumber" name="1570" href="#1570">1570</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;</em>
+<a class="jxr_linenumber" name="1571" href="#1571">1571</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A directory to be deleted does not have to be empty.&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1572" href="#1572">1572</a> <em class="jxr_javadoccomment">     * &lt;li&gt;No exceptions are thrown when a file or directory cannot be deleted.&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1573" href="#1573">1573</a> <em class="jxr_javadoccomment">     * &lt;/ul&gt;</em>
+<a class="jxr_linenumber" name="1574" href="#1574">1574</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1575" href="#1575">1575</a> <em class="jxr_javadoccomment">     * @param file  file or directory to delete, can be {@code null}</em>
+<a class="jxr_linenumber" name="1576" href="#1576">1576</a> <em class="jxr_javadoccomment">     * @return {@code true} if the file or directory was deleted, otherwise</em>
+<a class="jxr_linenumber" name="1577" href="#1577">1577</a> <em class="jxr_javadoccomment">     * {@code false}</em>
+<a class="jxr_linenumber" name="1578" href="#1578">1578</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1579" href="#1579">1579</a> <em class="jxr_javadoccomment">     * @since 1.4</em>
+<a class="jxr_linenumber" name="1580" href="#1580">1580</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1581" href="#1581">1581</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> deleteQuietly(<strong class="jxr_keyword">final</strong> File file) {
+<a class="jxr_linenumber" name="1582" href="#1582">1582</a>         <strong class="jxr_keyword">if</strong> (file == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1583" href="#1583">1583</a>             <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="1584" href="#1584">1584</a>         }
+<a class="jxr_linenumber" name="1585" href="#1585">1585</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1586" href="#1586">1586</a>             <strong class="jxr_keyword">if</strong> (file.isDirectory()) {
+<a class="jxr_linenumber" name="1587" href="#1587">1587</a>                 cleanDirectory(file);
+<a class="jxr_linenumber" name="1588" href="#1588">1588</a>             }
+<a class="jxr_linenumber" name="1589" href="#1589">1589</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ignored) {
+<a class="jxr_linenumber" name="1590" href="#1590">1590</a>         }
+<a class="jxr_linenumber" name="1591" href="#1591">1591</a> 
+<a class="jxr_linenumber" name="1592" href="#1592">1592</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1593" href="#1593">1593</a>             <strong class="jxr_keyword">return</strong> file.delete();
+<a class="jxr_linenumber" name="1594" href="#1594">1594</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ignored) {
+<a class="jxr_linenumber" name="1595" href="#1595">1595</a>             <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="1596" href="#1596">1596</a>         }
+<a class="jxr_linenumber" name="1597" href="#1597">1597</a>     }
+<a class="jxr_linenumber" name="1598" href="#1598">1598</a> 
+<a class="jxr_linenumber" name="1599" href="#1599">1599</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1600" href="#1600">1600</a> <em class="jxr_javadoccomment">     * Determines whether the {@code parent} directory contains the {@code child} element (a file or directory).</em>
+<a class="jxr_linenumber" name="1601" href="#1601">1601</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="1602" href="#1602">1602</a> <em class="jxr_javadoccomment">     * Files are normalized before comparison.</em>
+<a class="jxr_linenumber" name="1603" href="#1603">1603</a> <em class="jxr_javadoccomment">     * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="1604" href="#1604">1604</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1605" href="#1605">1605</a> <em class="jxr_javadoccomment">     * Edge cases:</em>
+<a class="jxr_linenumber" name="1606" href="#1606">1606</a> <em class="jxr_javadoccomment">     * &lt;ul&gt;</em>
+<a class="jxr_linenumber" name="1607" href="#1607">1607</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A {@code directory} must not be null: if null, throw IllegalArgumentException&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1608" href="#1608">1608</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A {@code directory} must be a directory: if not a directory, throw IllegalArgumentException&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1609" href="#1609">1609</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A directory does not contain itself: return false&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1610" href="#1610">1610</a> <em class="jxr_javadoccomment">     * &lt;li&gt;A null child file is not contained in any parent: return false&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="1611" href="#1611">1611</a> <em class="jxr_javadoccomment">     * &lt;/ul&gt;</em>
+<a class="jxr_linenumber" name="1612" href="#1612">1612</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1613" href="#1613">1613</a> <em class="jxr_javadoccomment">     * @param directory</em>
+<a class="jxr_linenumber" name="1614" href="#1614">1614</a> <em class="jxr_javadoccomment">     *            the file to consider as the parent.</em>
+<a class="jxr_linenumber" name="1615" href="#1615">1615</a> <em class="jxr_javadoccomment">     * @param child</em>
+<a class="jxr_linenumber" name="1616" href="#1616">1616</a> <em class="jxr_javadoccomment">     *            the file to consider as the child.</em>
+<a class="jxr_linenumber" name="1617" href="#1617">1617</a> <em class="jxr_javadoccomment">     * @return true is the candidate leaf is under by the specified composite. False otherwise.</em>
+<a class="jxr_linenumber" name="1618" href="#1618">1618</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
+<a class="jxr_linenumber" name="1619" href="#1619">1619</a> <em class="jxr_javadoccomment">     *             if an IO error occurs while checking the files.</em>
+<a class="jxr_linenumber" name="1620" href="#1620">1620</a> <em class="jxr_javadoccomment">     * @since 2.2</em>
+<a class="jxr_linenumber" name="1621" href="#1621">1621</a> <em class="jxr_javadoccomment">     * @see FilenameUtils#directoryContains(String, String)</em>
+<a class="jxr_linenumber" name="1622" href="#1622">1622</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1623" href="#1623">1623</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> directoryContains(<strong class="jxr_keyword">final</strong> File directory, <strong class="jxr_keyword">final</strong> File child) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1624" href="#1624">1624</a> 
+<a class="jxr_linenumber" name="1625" href="#1625">1625</a>         <em class="jxr_comment">// Fail fast against NullPointerException</em>
+<a class="jxr_linenumber" name="1626" href="#1626">1626</a>         <strong class="jxr_keyword">if</strong> (directory == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1627" href="#1627">1627</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Directory must not be null"</span>);
+<a class="jxr_linenumber" name="1628" href="#1628">1628</a>         }
+<a class="jxr_linenumber" name="1629" href="#1629">1629</a> 
+<a class="jxr_linenumber" name="1630" href="#1630">1630</a>         <strong class="jxr_keyword">if</strong> (!directory.isDirectory()) {
+<a class="jxr_linenumber" name="1631" href="#1631">1631</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Not a directory: "</span> + directory);
+<a class="jxr_linenumber" name="1632" href="#1632">1632</a>         }
+<a class="jxr_linenumber" name="1633" href="#1633">1633</a> 
+<a class="jxr_linenumber" name="1634" href="#1634">1634</a>         <strong class="jxr_keyword">if</strong> (child == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1635" href="#1635">1635</a>             <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="1636" href="#1636">1636</a>         }
+<a class="jxr_linenumber" name="1637" href="#1637">1637</a> 
+<a class="jxr_linenumber" name="1638" href="#1638">1638</a>         <strong class="jxr_keyword">if</strong> (!directory.exists() || !child.exists()) {
+<a class="jxr_linenumber" name="1639" href="#1639">1639</a>             <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="1640" href="#1640">1640</a>         }
+<a class="jxr_linenumber" name="1641" href="#1641">1641</a> 
+<a class="jxr_linenumber" name="1642" href="#1642">1642</a>         <em class="jxr_comment">// Canonicalize paths (normalizes relative paths)</em>
+<a class="jxr_linenumber" name="1643" href="#1643">1643</a>         <strong class="jxr_keyword">final</strong> String canonicalParent = directory.getCanonicalPath();
+<a class="jxr_linenumber" name="1644" href="#1644">1644</a>         <strong class="jxr_keyword">final</strong> String canonicalChild = child.getCanonicalPath();
+<a class="jxr_linenumber" name="1645" href="#1645">1645</a> 
+<a class="jxr_linenumber" name="1646" href="#1646">1646</a>         <strong class="jxr_keyword">return</strong> FilenameUtils.directoryContains(canonicalParent, canonicalChild);
+<a class="jxr_linenumber" name="1647" href="#1647">1647</a>     }
 <a class="jxr_linenumber" name="1648" href="#1648">1648</a> 
-<a class="jxr_linenumber" name="1649" href="#1649">1649</a>         <strong class="jxr_keyword">return</strong> FilenameUtils.directoryContains(canonicalParent, canonicalChild);
-<a class="jxr_linenumber" name="1650" href="#1650">1650</a>     }
-<a class="jxr_linenumber" name="1651" href="#1651">1651</a> 
-<a class="jxr_linenumber" name="1652" href="#1652">1652</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1653" href="#1653">1653</a> <em class="jxr_javadoccomment">     * Cleans a directory without deleting it.</em>
-<a class="jxr_linenumber" name="1654" href="#1654">1654</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1655" href="#1655">1655</a> <em class="jxr_javadoccomment">     * @param directory directory to clean</em>
-<a class="jxr_linenumber" name="1656" href="#1656">1656</a> <em class="jxr_javadoccomment">     * @throws IOException in case cleaning is unsuccessful</em>
-<a class="jxr_linenumber" name="1657" href="#1657">1657</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1658" href="#1658">1658</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> cleanDirectory(<strong class="jxr_keyword">final</strong> File directory) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1659" href="#1659">1659</a>         <strong class="jxr_keyword">if</strong> (!directory.exists()) {
-<a class="jxr_linenumber" name="1660" href="#1660">1660</a>             <strong class="jxr_keyword">final</strong> String message = directory + <span class="jxr_string">" does not exist"</span>;
-<a class="jxr_linenumber" name="1661" href="#1661">1661</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(message);
-<a class="jxr_linenumber" name="1662" href="#1662">1662</a>         }
-<a class="jxr_linenumber" name="1663" href="#1663">1663</a> 
-<a class="jxr_linenumber" name="1664" href="#1664">1664</a>         <strong class="jxr_keyword">if</strong> (!directory.isDirectory()) {
-<a class="jxr_linenumber" name="1665" href="#1665">1665</a>             <strong class="jxr_keyword">final</strong> String message = directory + <span class="jxr_string">" is not a directory"</span>;
-<a class="jxr_linenumber" name="1666" href="#1666">1666</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(message);
-<a class="jxr_linenumber" name="1667" href="#1667">1667</a>         }
-<a class="jxr_linenumber" name="1668" href="#1668">1668</a> 
-<a class="jxr_linenumber" name="1669" href="#1669">1669</a>         <strong class="jxr_keyword">final</strong> File[] files = directory.listFiles();
-<a class="jxr_linenumber" name="1670" href="#1670">1670</a>         <strong class="jxr_keyword">if</strong> (files == <strong class="jxr_keyword">null</strong>) {  <em class="jxr_comment">// null if security restricted</em>
-<a class="jxr_linenumber" name="1671" href="#1671">1671</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Failed to list contents of "</span> + directory);
-<a class="jxr_linenumber" name="1672" href="#1672">1672</a>         }
-<a class="jxr_linenumber" name="1673" href="#1673">1673</a> 
-<a class="jxr_linenumber" name="1674" href="#1674">1674</a>         IOException exception = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1675" href="#1675">1675</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> File file : files) {
-<a class="jxr_linenumber" name="1676" href="#1676">1676</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1677" href="#1677">1677</a>                 forceDelete(file);
-<a class="jxr_linenumber" name="1678" href="#1678">1678</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException ioe) {
-<a class="jxr_linenumber" name="1679" href="#1679">1679</a>                 exception = ioe;
-<a class="jxr_linenumber" name="1680" href="#1680">1680</a>             }
-<a class="jxr_linenumber" name="1681" href="#1681">1681</a>         }
-<a class="jxr_linenumber" name="1682" href="#1682">1682</a> 
-<a class="jxr_linenumber" name="1683" href="#1683">1683</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">null</strong> != exception) {
-<a class="jxr_linenumber" name="1684" href="#1684">1684</a>             <strong class="jxr_keyword">throw</strong> exception;
-<a class="jxr_linenumber" name="1685" href="#1685">1685</a>         }
-<a class="jxr_linenumber" name="1686" href="#1686">1686</a>     }
-<a class="jxr_linenumber" name="1687" href="#1687">1687</a> 
-<a class="jxr_linenumber" name="1688" href="#1688">1688</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="1689" href="#1689">1689</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1690" href="#1690">1690</a> <em class="jxr_javadoccomment">     * Waits for NFS to propagate a file creation, imposing a timeout.</em>
-<a class="jxr_linenumber" name="1691" href="#1691">1691</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1692" href="#1692">1692</a> <em class="jxr_javadoccomment">     * This method repeatedly tests {@link File#exists()} until it returns</em>
-<a class="jxr_linenumber" name="1693" href="#1693">1693</a> <em class="jxr_javadoccomment">     * true up to the maximum time specified in seconds.</em>
-<a class="jxr_linenumber" name="1694" href="#1694">1694</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1695" href="#1695">1695</a> <em class="jxr_javadoccomment">     * @param file  the file to check, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1696" href="#1696">1696</a> <em class="jxr_javadoccomment">     * @param seconds  the maximum time in seconds to wait</em>
-<a class="jxr_linenumber" name="1697" href="#1697">1697</a> <em class="jxr_javadoccomment">     * @return true if file exists</em>
-<a class="jxr_linenumber" name="1698" href="#1698">1698</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if the file is {@code null}</em>
-<a class="jxr_linenumber" name="1699" href="#1699">1699</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1700" href="#1700">1700</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> waitFor(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> seconds) {
-<a class="jxr_linenumber" name="1701" href="#1701">1701</a>         <strong class="jxr_keyword">int</strong> timeout = 0;
-<a class="jxr_linenumber" name="1702" href="#1702">1702</a>         <strong class="jxr_keyword">int</strong> tick = 0;
-<a class="jxr_linenumber" name="1703" href="#1703">1703</a>         <strong class="jxr_keyword">while</strong> (!file.exists()) {
-<a class="jxr_linenumber" name="1704" href="#1704">1704</a>             <strong class="jxr_keyword">if</strong> (tick++ &gt;= 10) {
-<a class="jxr_linenumber" name="1705" href="#1705">1705</a>                 tick = 0;
-<a class="jxr_linenumber" name="1706" href="#1706">1706</a>                 <strong class="jxr_keyword">if</strong> (timeout++ &gt; seconds) {
-<a class="jxr_linenumber" name="1707" href="#1707">1707</a>                     <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1708" href="#1708">1708</a>                 }
-<a class="jxr_linenumber" name="1709" href="#1709">1709</a>             }
-<a class="jxr_linenumber" name="1710" href="#1710">1710</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1711" href="#1711">1711</a>                 Thread.sleep(100);
-<a class="jxr_linenumber" name="1712" href="#1712">1712</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> InterruptedException ignore) {
-<a class="jxr_linenumber" name="1713" href="#1713">1713</a>                 <em class="jxr_comment">// ignore exception</em>
-<a class="jxr_linenumber" name="1714" href="#1714">1714</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ex) {
-<a class="jxr_linenumber" name="1715" href="#1715">1715</a>                 <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="1716" href="#1716">1716</a>             }
-<a class="jxr_linenumber" name="1717" href="#1717">1717</a>         }
-<a class="jxr_linenumber" name="1718" href="#1718">1718</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1719" href="#1719">1719</a>     }
-<a class="jxr_linenumber" name="1720" href="#1720">1720</a> 
-<a class="jxr_linenumber" name="1721" href="#1721">1721</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="1722" href="#1722">1722</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1723" href="#1723">1723</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String.</em>
-<a class="jxr_linenumber" name="1724" href="#1724">1724</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
-<a class="jxr_linenumber" name="1725" href="#1725">1725</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1726" href="#1726">1726</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1727" href="#1727">1727</a> <em class="jxr_javadoccomment">     * @param encoding  the encoding to use, {@code null} means platform default</em>
-<a class="jxr_linenumber" name="1728" href="#1728">1728</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
-<a class="jxr_linenumber" name="1729" href="#1729">1729</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
-<a class="jxr_linenumber" name="1730" href="#1730">1730</a> <em class="jxr_javadoccomment">     * @since 2.3</em>
-<a class="jxr_linenumber" name="1731" href="#1731">1731</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1732" href="#1732">1732</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> Charset encoding) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1733" href="#1733">1733</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1734" href="#1734">1734</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1735" href="#1735">1735</a>             in = openInputStream(file);
-<a class="jxr_linenumber" name="1736" href="#1736">1736</a>             <strong class="jxr_keyword">return</strong> IOUtils.toString(in, Charsets.toCharset(encoding));
-<a class="jxr_linenumber" name="1737" href="#1737">1737</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1738" href="#1738">1738</a>             IOUtils.closeQuietly(in);
-<a class="jxr_linenumber" name="1739" href="#1739">1739</a>         }
-<a class="jxr_linenumber" name="1740" href="#1740">1740</a>     }
-<a class="jxr_linenumber" name="1741" href="#1741">1741</a> 
-<a class="jxr_linenumber" name="1742" href="#1742">1742</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1743" href="#1743">1743</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String. The file is always closed.</em>
-<a class="jxr_linenumber" name="1744" href="#1744">1744</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1745" href="#1745">1745</a> <em class="jxr_javadoccomment">     * @param file</em>
-<a class="jxr_linenumber" name="1746" href="#1746">1746</a> <em class="jxr_javadoccomment">     *            the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1747" href="#1747">1747</a> <em class="jxr_javadoccomment">     * @param encoding</em>
-<a class="jxr_linenumber" name="1748" href="#1748">1748</a> <em class="jxr_javadoccomment">     *            the encoding to use, {@code null} means platform default</em>
-<a class="jxr_linenumber" name="1749" href="#1749">1749</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
-<a class="jxr_linenumber" name="1750" href="#1750">1750</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
-<a class="jxr_linenumber" name="1751" href="#1751">1751</a> <em class="jxr_javadoccomment">     *             in case of an I/O error</em>
-<a class="jxr_linenumber" name="1752" href="#1752">1752</a> <em class="jxr_javadoccomment">     * @throws UnsupportedCharsetException</em>
-<a class="jxr_linenumber" name="1753" href="#1753">1753</a> <em class="jxr_javadoccomment">     *             thrown instead of {@link UnsupportedEncodingException} in version 2.2 if the encoding is not</em>
-<a class="jxr_linenumber" name="1754" href="#1754">1754</a> <em class="jxr_javadoccomment">     *             supported.</em>
-<a class="jxr_linenumber" name="1755" href="#1755">1755</a> <em class="jxr_javadoccomment">     * @since 2.3</em>
-<a class="jxr_linenumber" name="1756" href="#1756">1756</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1757" href="#1757">1757</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> String encoding) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1758" href="#1758">1758</a>         <strong class="jxr_keyword">return</strong> readFileToString(file, Charsets.toCharset(encoding));
-<a class="jxr_linenumber" name="1759" href="#1759">1759</a>     }
-<a class="jxr_linenumber" name="1760" href="#1760">1760</a> 
-<a class="jxr_linenumber" name="1761" href="#1761">1761</a> 
-<a class="jxr_linenumber" name="1762" href="#1762">1762</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1763" href="#1763">1763</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String using the default encoding for the VM.</em>
-<a class="jxr_linenumber" name="1764" href="#1764">1764</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
-<a class="jxr_linenumber" name="1765" href="#1765">1765</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1766" href="#1766">1766</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1767" href="#1767">1767</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
-<a class="jxr_linenumber" name="1768" href="#1768">1768</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
-<a class="jxr_linenumber" name="1769" href="#1769">1769</a> <em class="jxr_javadoccomment">     * @since 1.3.1</em>
-<a class="jxr_linenumber" name="1770" href="#1770">1770</a> <em class="jxr_javadoccomment">     * @deprecated 2.5 use {@link #readFileToString(File, Charset)} instead</em>
-<a class="jxr_linenumber" name="1771" href="#1771">1771</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1772" href="#1772">1772</a>     @Deprecated
-<a class="jxr_linenumber" name="1773" href="#1773">1773</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1774" href="#1774">1774</a>         <strong class="jxr_keyword">return</strong> readFileToString(file, Charset.defaultCharset());
-<a class="jxr_linenumber" name="1775" href="#1775">1775</a>     }
-<a class="jxr_linenumber" name="1776" href="#1776">1776</a> 
-<a class="jxr_linenumber" name="1777" href="#1777">1777</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1778" href="#1778">1778</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a byte array.</em>
-<a class="jxr_linenumber" name="1779" href="#1779">1779</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
-<a class="jxr_linenumber" name="1780" href="#1780">1780</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1781" href="#1781">1781</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1782" href="#1782">1782</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
-<a class="jxr_linenumber" name="1783" href="#1783">1783</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
-<a class="jxr_linenumber" name="1784" href="#1784">1784</a> <em class="jxr_javadoccomment">     * @since 1.1</em>
-<a class="jxr_linenumber" name="1785" href="#1785">1785</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1786" href="#1786">1786</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> byte[] readFileToByteArray(<strong class="jxr_keyword">final</strong> File file) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1787" href="#1787">1787</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1788" href="#1788">1788</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1789" href="#1789">1789</a>             in = openInputStream(file);
-<a class="jxr_linenumber" name="1790" href="#1790">1790</a>             <strong class="jxr_keyword">return</strong> IOUtils.toByteArray(in, file.length());
-<a class="jxr_linenumber" name="1791" href="#1791">1791</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1792" href="#1792">1792</a>             IOUtils.closeQuietly(in);
-<a class="jxr_linenumber" name="1793" href="#1793">1793</a>         }
-<a class="jxr_linenumber" name="1794" href="#1794">1794</a>     }
-<a class="jxr_linenumber" name="1795" href="#1795">1795</a> 
-<a class="jxr_linenumber" name="1796" href="#1796">1796</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1797" href="#1797">1797</a> <em class="jxr_javadoccomment">     * Reads the contents of a file line by line to a List of Strings.</em>
-<a class="jxr_linenumber" name="1798" href="#1798">1798</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
-<a class="jxr_linenumber" name="1799" href="#1799">1799</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1800" href="#1800">1800</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1801" href="#1801">1801</a> <em class="jxr_javadoccomment">     * @param encoding  the encoding to use, {@code null} means platform default</em>
-<a class="jxr_linenumber" name="1802" href="#1802">1802</a> <em class="jxr_javadoccomment">     * @return the list of Strings representing each line in the file, never {@code null}</em>
-<a class="jxr_linenumber" name="1803" href="#1803">1803</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
-<a class="jxr_linenumber" name="1804" href="#1804">1804</a> <em class="jxr_javadoccomment">     * @since 2.3</em>
-<a class="jxr_linenumber" name="1805" href="#1805">1805</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1806" href="#1806">1806</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; readLines(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> Charset encoding) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1807" href="#1807">1807</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1808" href="#1808">1808</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1809" href="#1809">1809</a>             in = openInputStream(file);
-<a class="jxr_linenumber" name="1810" href="#1810">1810</a>             <strong class="jxr_keyword">return</strong> IOUtils.readLines(in, Charsets.toCharset(encoding));
-<a class="jxr_linenumber" name="1811" href="#1811">1811</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1812" href="#1812">1812</a>             IOUtils.closeQuietly(in);
-<a class="jxr_linenumber" name="1813" href="#1813">1813</a>         }
-<a class="jxr_linenumber" name="1814" href="#1814">1814</a>     }
-<a class="jxr_linenumber" name="1815" href="#1815">1815</a> 
-<a class="jxr_linenumber" name="1816" href="#1816">1816</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1817" href="#1817">1817</a> <em class="jxr_javadoccomment">     * Reads the contents of a file line by line to a List of Strings. The file is always closed.</em>
-<a class="jxr_linenumber" name="1818" href="#1818">1818</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1819" href="#1819">1819</a> <em class="jxr_javadoccomment">     * @param file</em>
-<a class="jxr_linenumber" name="1820" href="#1820">1820</a> <em class="jxr_javadoccomment">     *            the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1821" href="#1821">1821</a> <em class="jxr_javadoccomment">     * @param encoding</em>
-<a class="jxr_linenumber" name="1822" href="#1822">1822</a> <em class="jxr_javadoccomment">     *            the encoding to use, {@code null} means platform default</em>
-<a class="jxr_linenumber" name="1823" href="#1823">1823</a> <em class="jxr_javadoccomment">     * @return the list of Strings representing each line in the file, never {@code null}</em>
-<a class="jxr_linenumber" name="1824" href="#1824">1824</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
-<a class="jxr_linenumber" name="1825" href="#1825">1825</a> <em class="jxr_javadoccomment">     *             in case of an I/O error</em>
-<a class="jxr_linenumber" name="1826" href="#1826">1826</a> <em class="jxr_javadoccomment">     * @throws UnsupportedCharsetException</em>
-<a class="jxr_linenumber" name="1827" href="#1827">1827</a> <em class="jxr_javadoccomment">     *             thrown instead of {@link UnsupportedEncodingException} in version 2.2 if the encoding is not</em>
-<a class="jxr_linenumber" name="1828" href="#1828">1828</a> <em class="jxr_javadoccomment">     *             supported.</em>
-<a class="jxr_linenumber" name="1829" href="#1829">1829</a> <em class="jxr_javadoccomment">     * @since 1.1</em>
-<a class="jxr_linenumber" name="1830" href="#1830">1830</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1831" href="#1831">1831</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; readLines(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> String encoding) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1832" href="#1832">1832</a>         <strong class="jxr_keyword">return</strong> readLines(file, Charsets.toCharset(encoding));
-<a class="jxr_linenumber" name="1833" href="#1833">1833</a>     }
-<a class="jxr_linenumber" name="1834" href="#1834">1834</a> 
-<a class="jxr_linenumber" name="1835" href="#1835">1835</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1836" href="#1836">1836</a> <em class="jxr_javadoccomment">     * Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.</em>
-<a class="jxr_linenumber" name="1837" href="#1837">1837</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
-<a class="jxr_linenumber" name="1838" href="#1838">1838</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1839" href="#1839">1839</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1840" href="#1840">1840</a> <em class="jxr_javadoccomment">     * @return the list of Strings representing each line in the file, never {@code null}</em>
-<a class="jxr_linenumber" name="1841" href="#1841">1841</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
-<a class="jxr_linenumber" name="1842" href="#1842">1842</a> <em class="jxr_javadoccomment">     * @since 1.3</em>
-<a class="jxr_linenumber" name="1843" href="#1843">1843</a> <em class="jxr_javadoccomment">     * @deprecated 2.5 use {@link #readLines(File, Charset)} instead</em>
-<a class="jxr_linenumber" name="1844" href="#1844">1844</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1845" href="#1845">1845</a>     @Deprecated
-<a class="jxr_linenumber" name="1846" href="#1846">1846</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; readLines(<strong class="jxr_keyword">final</strong> File file) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1847" href="#1847">1847</a>         <strong class="jxr_keyword">return</strong> readLines(file, Charset.defaultCharset());
-<a class="jxr_linenumber" name="1848" href="#1848">1848</a>     }
-<a class="jxr_linenumber" name="1849" href="#1849">1849</a> 
-<a class="jxr_linenumber" name="1850" href="#1850">1850</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1851" href="#1851">1851</a> <em class="jxr_javadoccomment">     * Returns an Iterator for the lines in a &lt;code&gt;File&lt;/code&gt;.</em>
-<a class="jxr_linenumber" name="1852" href="#1852">1852</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1853" href="#1853">1853</a> <em class="jxr_javadoccomment">     * This method opens an &lt;code&gt;InputStream&lt;/code&gt; for the file.</em>
-<a class="jxr_linenumber" name="1854" href="#1854">1854</a> <em class="jxr_javadoccomment">     * When you have finished with the iterator you should close the stream</em>
-<a class="jxr_linenumber" name="1855" href="#1855">1855</a> <em class="jxr_javadoccomment">     * to free internal resources. This can be done by calling the</em>
-<a class="jxr_linenumber" name="1856" href="#1856">1856</a> <em class="jxr_javadoccomment">     * {@link LineIterator#close()} or</em>
-<a class="jxr_linenumber" name="1857" href="#1857">1857</a> <em class="jxr_javadoccomment">     * {@link LineIterator#closeQuietly(LineIterator)} method.</em>
-<a class="jxr_linenumber" name="1858" href="#1858">1858</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1859" href="#1859">1859</a> <em class="jxr_javadoccomment">     * The recommended usage pattern is:</em>
-<a class="jxr_linenumber" name="1860" href="#1860">1860</a> <em class="jxr_javadoccomment">     * &lt;pre&gt;</em>
-<a class="jxr_linenumber" name="1861" href="#1861">1861</a> <em class="jxr_javadoccomment">     * LineIterator it = FileUtils.lineIterator(file, "UTF-8");</em>
-<a class="jxr_linenumber" name="1862" href="#1862">1862</a> <em class="jxr_javadoccomment">     * try {</em>
-<a class="jxr_linenumber" name="1863" href="#1863">1863</a> <em class="jxr_javadoccomment">     *   while (it.hasNext()) {</em>
-<a class="jxr_linenumber" name="1864" href="#1864">1864</a> <em class="jxr_javadoccomment">     *     String line = it.nextLine();</em>
-<a class="jxr_linenumber" name="1865" href="#1865">1865</a> <em class="jxr_javadoccomment">     *     /// do something with line</em>
-<a class="jxr_linenumber" name="1866" href="#1866">1866</a> <em class="jxr_javadoccomment">     *   }</em>
-<a class="jxr_linenumber" name="1867" href="#1867">1867</a> <em class="jxr_javadoccomment">     * } finally {</em>
-<a class="jxr_linenumber" name="1868" href="#1868">1868</a> <em class="jxr_javadoccomment">     *   LineIterator.closeQuietly(iterator);</em>
-<a class="jxr_linenumber" name="1869" href="#1869">1869</a> <em class="jxr_javadoccomment">     * }</em>
-<a class="jxr_linenumber" name="1870" href="#1870">1870</a> <em class="jxr_javadoccomment">     * &lt;/pre&gt;</em>
-<a class="jxr_linenumber" name="1871" href="#1871">1871</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="1872" href="#1872">1872</a> <em class="jxr_javadoccomment">     * If an exception occurs during the creation of the iterator, the</em>
-<a class="jxr_linenumber" name="1873" href="#1873">1873</a> <em class="jxr_javadoccomment">     * underlying stream is closed.</em>
-<a class="jxr_linenumber" name="1874" href="#1874">1874</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1875" href="#1875">1875</a> <em class="jxr_javadoccomment">     * @param file  the file to open for input, must not be {@code null}</em>
-<a class="jxr_linenumber" name="1876" href="#1876">1876</a> <em class="jxr_javadoccomment">     * @param encoding  the encoding to use, {@code null} means platform default</em>
-<a class="jxr_linenumber" name="1877" href="#1877">1877</a> <em class="jxr_javadoccomment">     * @return an Iterator of the lines in the file, never {@code null}</em>
-<a class="jxr_linenumber" name="1878" href="#1878">1878</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error (file closed)</em>
-<a class="jxr_linenumber" name="1879" href="#1879">1879</a> <em class="jxr_javadoccomment">     * @since 1.2</em>
-<a class="jxr_linenumber" name="1880" href="#1880">1880</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1881" href="#1881">1881</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../org/apache/commons/io/LineIterator.html">LineIterator</a> lineIterator(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> String encoding) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1882" href="#1882">1882</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1883" href="#1883">1883</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1884" href="#1884">1884</a>             in = openInputStream(file);
-<a class="jxr_linenumber" name="1885" href="#1885">1885</a>             <strong class="jxr_keyword">return</strong> IOUtils.lineIterator(in, encoding);
-<a class="jxr_linenumber" name="1886" href="#1886">1886</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException ex) {
+<a class="jxr_linenumber" name="1649" href="#1649">1649</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1650" href="#1650">1650</a> <em class="jxr_javadoccomment">     * Cleans a directory without deleting it.</em>
+<a class="jxr_linenumber" name="1651" href="#1651">1651</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1652" href="#1652">1652</a> <em class="jxr_javadoccomment">     * @param directory directory to clean</em>
+<a class="jxr_linenumber" name="1653" href="#1653">1653</a> <em class="jxr_javadoccomment">     * @throws IOException in case cleaning is unsuccessful</em>
+<a class="jxr_linenumber" name="1654" href="#1654">1654</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1655" href="#1655">1655</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> cleanDirectory(<strong class="jxr_keyword">final</strong> File directory) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1656" href="#1656">1656</a>         <strong class="jxr_keyword">if</strong> (!directory.exists()) {
+<a class="jxr_linenumber" name="1657" href="#1657">1657</a>             <strong class="jxr_keyword">final</strong> String message = directory + <span class="jxr_string">" does not exist"</span>;
+<a class="jxr_linenumber" name="1658" href="#1658">1658</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(message);
+<a class="jxr_linenumber" name="1659" href="#1659">1659</a>         }
+<a class="jxr_linenumber" name="1660" href="#1660">1660</a> 
+<a class="jxr_linenumber" name="1661" href="#1661">1661</a>         <strong class="jxr_keyword">if</strong> (!directory.isDirectory()) {
+<a class="jxr_linenumber" name="1662" href="#1662">1662</a>             <strong class="jxr_keyword">final</strong> String message = directory + <span class="jxr_string">" is not a directory"</span>;
+<a class="jxr_linenumber" name="1663" href="#1663">1663</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(message);
+<a class="jxr_linenumber" name="1664" href="#1664">1664</a>         }
+<a class="jxr_linenumber" name="1665" href="#1665">1665</a> 
+<a class="jxr_linenumber" name="1666" href="#1666">1666</a>         <strong class="jxr_keyword">final</strong> File[] files = directory.listFiles();
+<a class="jxr_linenumber" name="1667" href="#1667">1667</a>         <strong class="jxr_keyword">if</strong> (files == <strong class="jxr_keyword">null</strong>) {  <em class="jxr_comment">// null if security restricted</em>
+<a class="jxr_linenumber" name="1668" href="#1668">1668</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Failed to list contents of "</span> + directory);
+<a class="jxr_linenumber" name="1669" href="#1669">1669</a>         }
+<a class="jxr_linenumber" name="1670" href="#1670">1670</a> 
+<a class="jxr_linenumber" name="1671" href="#1671">1671</a>         IOException exception = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1672" href="#1672">1672</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> File file : files) {
+<a class="jxr_linenumber" name="1673" href="#1673">1673</a>             <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1674" href="#1674">1674</a>                 forceDelete(file);
+<a class="jxr_linenumber" name="1675" href="#1675">1675</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException ioe) {
+<a class="jxr_linenumber" name="1676" href="#1676">1676</a>                 exception = ioe;
+<a class="jxr_linenumber" name="1677" href="#1677">1677</a>             }
+<a class="jxr_linenumber" name="1678" href="#1678">1678</a>         }
+<a class="jxr_linenumber" name="1679" href="#1679">1679</a> 
+<a class="jxr_linenumber" name="1680" href="#1680">1680</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">null</strong> != exception) {
+<a class="jxr_linenumber" name="1681" href="#1681">1681</a>             <strong class="jxr_keyword">throw</strong> exception;
+<a class="jxr_linenumber" name="1682" href="#1682">1682</a>         }
+<a class="jxr_linenumber" name="1683" href="#1683">1683</a>     }
+<a class="jxr_linenumber" name="1684" href="#1684">1684</a> 
+<a class="jxr_linenumber" name="1685" href="#1685">1685</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="1686" href="#1686">1686</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1687" href="#1687">1687</a> <em class="jxr_javadoccomment">     * Waits for NFS to propagate a file creation, imposing a timeout.</em>
+<a class="jxr_linenumber" name="1688" href="#1688">1688</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="1689" href="#1689">1689</a> <em class="jxr_javadoccomment">     * This method repeatedly tests {@link File#exists()} until it returns</em>
+<a class="jxr_linenumber" name="1690" href="#1690">1690</a> <em class="jxr_javadoccomment">     * true up to the maximum time specified in seconds.</em>
+<a class="jxr_linenumber" name="1691" href="#1691">1691</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1692" href="#1692">1692</a> <em class="jxr_javadoccomment">     * @param file  the file to check, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1693" href="#1693">1693</a> <em class="jxr_javadoccomment">     * @param seconds  the maximum time in seconds to wait</em>
+<a class="jxr_linenumber" name="1694" href="#1694">1694</a> <em class="jxr_javadoccomment">     * @return true if file exists</em>
+<a class="jxr_linenumber" name="1695" href="#1695">1695</a> <em class="jxr_javadoccomment">     * @throws NullPointerException if the file is {@code null}</em>
+<a class="jxr_linenumber" name="1696" href="#1696">1696</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1697" href="#1697">1697</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> waitFor(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> seconds) {
+<a class="jxr_linenumber" name="1698" href="#1698">1698</a>         <strong class="jxr_keyword">int</strong> timeout = 0;
+<a class="jxr_linenumber" name="1699" href="#1699">1699</a>         <strong class="jxr_keyword">int</strong> tick = 0;
+<a class="jxr_linenumber" name="1700" href="#1700">1700</a>         <strong class="jxr_keyword">while</strong> (!file.exists()) {
+<a class="jxr_linenumber" name="1701" href="#1701">1701</a>             <strong class="jxr_keyword">if</strong> (tick++ &gt;= 10) {
+<a class="jxr_linenumber" name="1702" href="#1702">1702</a>                 tick = 0;
+<a class="jxr_linenumber" name="1703" href="#1703">1703</a>                 <strong class="jxr_keyword">if</strong> (timeout++ &gt; seconds) {
+<a class="jxr_linenumber" name="1704" href="#1704">1704</a>                     <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="1705" href="#1705">1705</a>                 }
+<a class="jxr_linenumber" name="1706" href="#1706">1706</a>             }
+<a class="jxr_linenumber" name="1707" href="#1707">1707</a>             <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1708" href="#1708">1708</a>                 Thread.sleep(100);
+<a class="jxr_linenumber" name="1709" href="#1709">1709</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> InterruptedException ignore) {
+<a class="jxr_linenumber" name="1710" href="#1710">1710</a>                 <em class="jxr_comment">// ignore exception</em>
+<a class="jxr_linenumber" name="1711" href="#1711">1711</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception ex) {
+<a class="jxr_linenumber" name="1712" href="#1712">1712</a>                 <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="1713" href="#1713">1713</a>             }
+<a class="jxr_linenumber" name="1714" href="#1714">1714</a>         }
+<a class="jxr_linenumber" name="1715" href="#1715">1715</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1716" href="#1716">1716</a>     }
+<a class="jxr_linenumber" name="1717" href="#1717">1717</a> 
+<a class="jxr_linenumber" name="1718" href="#1718">1718</a>     <em class="jxr_comment">//-----------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="1719" href="#1719">1719</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1720" href="#1720">1720</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String.</em>
+<a class="jxr_linenumber" name="1721" href="#1721">1721</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
+<a class="jxr_linenumber" name="1722" href="#1722">1722</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1723" href="#1723">1723</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1724" href="#1724">1724</a> <em class="jxr_javadoccomment">     * @param encoding  the encoding to use, {@code null} means platform default</em>
+<a class="jxr_linenumber" name="1725" href="#1725">1725</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
+<a class="jxr_linenumber" name="1726" href="#1726">1726</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
+<a class="jxr_linenumber" name="1727" href="#1727">1727</a> <em class="jxr_javadoccomment">     * @since 2.3</em>
+<a class="jxr_linenumber" name="1728" href="#1728">1728</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1729" href="#1729">1729</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> Charset encoding) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1730" href="#1730">1730</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1731" href="#1731">1731</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1732" href="#1732">1732</a>             in = openInputStream(file);
+<a class="jxr_linenumber" name="1733" href="#1733">1733</a>             <strong class="jxr_keyword">return</strong> IOUtils.toString(in, Charsets.toCharset(encoding));
+<a class="jxr_linenumber" name="1734" href="#1734">1734</a>         } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1735" href="#1735">1735</a>             IOUtils.closeQuietly(in);
+<a class="jxr_linenumber" name="1736" href="#1736">1736</a>         }
+<a class="jxr_linenumber" name="1737" href="#1737">1737</a>     }
+<a class="jxr_linenumber" name="1738" href="#1738">1738</a> 
+<a class="jxr_linenumber" name="1739" href="#1739">1739</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1740" href="#1740">1740</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String. The file is always closed.</em>
+<a class="jxr_linenumber" name="1741" href="#1741">1741</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1742" href="#1742">1742</a> <em class="jxr_javadoccomment">     * @param file</em>
+<a class="jxr_linenumber" name="1743" href="#1743">1743</a> <em class="jxr_javadoccomment">     *            the file to read, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1744" href="#1744">1744</a> <em class="jxr_javadoccomment">     * @param encoding</em>
+<a class="jxr_linenumber" name="1745" href="#1745">1745</a> <em class="jxr_javadoccomment">     *            the encoding to use, {@code null} means platform default</em>
+<a class="jxr_linenumber" name="1746" href="#1746">1746</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
+<a class="jxr_linenumber" name="1747" href="#1747">1747</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
+<a class="jxr_linenumber" name="1748" href="#1748">1748</a> <em class="jxr_javadoccomment">     *             in case of an I/O error</em>
+<a class="jxr_linenumber" name="1749" href="#1749">1749</a> <em class="jxr_javadoccomment">     * @throws UnsupportedCharsetException</em>
+<a class="jxr_linenumber" name="1750" href="#1750">1750</a> <em class="jxr_javadoccomment">     *             thrown instead of {@link UnsupportedEncodingException} in version 2.2 if the encoding is not</em>
+<a class="jxr_linenumber" name="1751" href="#1751">1751</a> <em class="jxr_javadoccomment">     *             supported.</em>
+<a class="jxr_linenumber" name="1752" href="#1752">1752</a> <em class="jxr_javadoccomment">     * @since 2.3</em>
+<a class="jxr_linenumber" name="1753" href="#1753">1753</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1754" href="#1754">1754</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file, <strong class="jxr_keyword">final</strong> String encoding) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1755" href="#1755">1755</a>         <strong class="jxr_keyword">return</strong> readFileToString(file, Charsets.toCharset(encoding));
+<a class="jxr_linenumber" name="1756" href="#1756">1756</a>     }
+<a class="jxr_linenumber" name="1757" href="#1757">1757</a> 
+<a class="jxr_linenumber" name="1758" href="#1758">1758</a> 
+<a class="jxr_linenumber" name="1759" href="#1759">1759</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1760" href="#1760">1760</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a String using the default encoding for the VM.</em>
+<a class="jxr_linenumber" name="1761" href="#1761">1761</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
+<a class="jxr_linenumber" name="1762" href="#1762">1762</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1763" href="#1763">1763</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1764" href="#1764">1764</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
+<a class="jxr_linenumber" name="1765" href="#1765">1765</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
+<a class="jxr_linenumber" name="1766" href="#1766">1766</a> <em class="jxr_javadoccomment">     * @since 1.3.1</em>
+<a class="jxr_linenumber" name="1767" href="#1767">1767</a> <em class="jxr_javadoccomment">     * @deprecated 2.5 use {@link #readFileToString(File, Charset)} instead</em>
+<a class="jxr_linenumber" name="1768" href="#1768">1768</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1769" href="#1769">1769</a>     @Deprecated
+<a class="jxr_linenumber" name="1770" href="#1770">1770</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String readFileToString(<strong class="jxr_keyword">final</strong> File file) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1771" href="#1771">1771</a>         <strong class="jxr_keyword">return</strong> readFileToString(file, Charset.defaultCharset());
+<a class="jxr_linenumber" name="1772" href="#1772">1772</a>     }
+<a class="jxr_linenumber" name="1773" href="#1773">1773</a> 
+<a class="jxr_linenumber" name="1774" href="#1774">1774</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1775" href="#1775">1775</a> <em class="jxr_javadoccomment">     * Reads the contents of a file into a byte array.</em>
+<a class="jxr_linenumber" name="1776" href="#1776">1776</a> <em class="jxr_javadoccomment">     * The file is always closed.</em>
+<a class="jxr_linenumber" name="1777" href="#1777">1777</a> <em class="jxr_javadoccomment">     *</em>
+<a class="jxr_linenumber" name="1778" href="#1778">1778</a> <em class="jxr_javadoccomment">     * @param file  the file to read, must not be {@code null}</em>
+<a class="jxr_linenumber" name="1779" href="#1779">1779</a> <em class="jxr_javadoccomment">     * @return the file contents, never {@code null}</em>
+<a class="jxr_linenumber" name="1780" href="#1780">1780</a> <em class="jxr_javadoccomment">     * @throws IOException in case of an I/O error</em>
+<a class="jxr_linenumber" name="1781" href="#1781">1781</a> <em class="jxr_javadoccomment">     * @since 1.1</em>
+<a class="jxr_linenumber" name="1782" href="#1782">1782</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1783" href="#1783">1783</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> byte[] readFileToByteArray(<strong class="jxr_keyword">final</strong> File file) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1784" href="#1784">1784</a>         InputStream in = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1785" href="#1785">1785</a>         <strong class="jxr_keyword">try</strong> {

[... 2383 lines stripped ...]