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"> * <p></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} <code>source</code> to a file</em>
-<a class="jxr_linenumber" name="1515" href="#1515">1515</a> <em class="jxr_javadoccomment"> * <code>destination</code>. The directories up to <code>destination</code></em>
-<a class="jxr_linenumber" name="1516" href="#1516">1516</a> <em class="jxr_javadoccomment"> * will be created if they don't already exist. <code>destination</code></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 <code>InputStream</code> 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 <code>File</code> 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 <code>source</code></em>
-<a class="jxr_linenumber" name="1523" href="#1523">1523</a> <em class="jxr_javadoccomment"> * @throws IOException if <code>destination</code> is a directory</em>
-<a class="jxr_linenumber" name="1524" href="#1524">1524</a> <em class="jxr_javadoccomment"> * @throws IOException if <code>destination</code> cannot be written</em>
-<a class="jxr_linenumber" name="1525" href="#1525">1525</a> <em class="jxr_javadoccomment"> * @throws IOException if <code>destination</code> 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"> * <p></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"> * <ul></em>
-<a class="jxr_linenumber" name="1574" href="#1574">1574</a> <em class="jxr_javadoccomment"> * <li>A directory to be deleted does not have to be empty.</li></em>
-<a class="jxr_linenumber" name="1575" href="#1575">1575</a> <em class="jxr_javadoccomment"> * <li>No exceptions are thrown when a file or directory cannot be deleted.</li></em>
-<a class="jxr_linenumber" name="1576" href="#1576">1576</a> <em class="jxr_javadoccomment"> * </ul></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"> * <p></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"> * </p></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"> * <ul></em>
-<a class="jxr_linenumber" name="1610" href="#1610">1610</a> <em class="jxr_javadoccomment"> * <li>A {@code directory} must not be null: if null, throw IllegalArgumentException</li></em>
-<a class="jxr_linenumber" name="1611" href="#1611">1611</a> <em class="jxr_javadoccomment"> * <li>A {@code directory} must be a directory: if not a directory, throw IllegalArgumentException</li></em>
-<a class="jxr_linenumber" name="1612" href="#1612">1612</a> <em class="jxr_javadoccomment"> * <li>A directory does not contain itself: return false</li></em>
-<a class="jxr_linenumber" name="1613" href="#1613">1613</a> <em class="jxr_javadoccomment"> * <li>A null child file is not contained in any parent: return false</li></em>
-<a class="jxr_linenumber" name="1614" href="#1614">1614</a> <em class="jxr_javadoccomment"> * </ul></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} <code>source</code> to a file</em>
+<a class="jxr_linenumber" name="1519" href="#1519">1519</a> <em class="jxr_javadoccomment"> * <code>destination</code>. The directories up to <code>destination</code></em>
+<a class="jxr_linenumber" name="1520" href="#1520">1520</a> <em class="jxr_javadoccomment"> * will be created if they don't already exist. <code>destination</code></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 <code>InputStream</code> 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 <code>File</code> 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 <code>destination</code> is a directory</em>
+<a class="jxr_linenumber" name="1528" href="#1528">1528</a> <em class="jxr_javadoccomment"> * @throws IOException if <code>destination</code> cannot be written</em>
+<a class="jxr_linenumber" name="1529" href="#1529">1529</a> <em class="jxr_javadoccomment"> * @throws IOException if <code>destination</code> 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"> * <p></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"> * <ul></em>
+<a class="jxr_linenumber" name="1571" href="#1571">1571</a> <em class="jxr_javadoccomment"> * <li>A directory to be deleted does not have to be empty.</li></em>
+<a class="jxr_linenumber" name="1572" href="#1572">1572</a> <em class="jxr_javadoccomment"> * <li>No exceptions are thrown when a file or directory cannot be deleted.</li></em>
+<a class="jxr_linenumber" name="1573" href="#1573">1573</a> <em class="jxr_javadoccomment"> * </ul></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"> * <p></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"> * </p></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"> * <ul></em>
+<a class="jxr_linenumber" name="1607" href="#1607">1607</a> <em class="jxr_javadoccomment"> * <li>A {@code directory} must not be null: if null, throw IllegalArgumentException</li></em>
+<a class="jxr_linenumber" name="1608" href="#1608">1608</a> <em class="jxr_javadoccomment"> * <li>A {@code directory} must be a directory: if not a directory, throw IllegalArgumentException</li></em>
+<a class="jxr_linenumber" name="1609" href="#1609">1609</a> <em class="jxr_javadoccomment"> * <li>A directory does not contain itself: return false</li></em>
+<a class="jxr_linenumber" name="1610" href="#1610">1610</a> <em class="jxr_javadoccomment"> * <li>A null child file is not contained in any parent: return false</li></em>
+<a class="jxr_linenumber" name="1611" href="#1611">1611</a> <em class="jxr_javadoccomment"> * </ul></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"> * <p></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++ >= 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++ > 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<String> 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<String> 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<String> 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 <code>File</code>.</em>
-<a class="jxr_linenumber" name="1852" href="#1852">1852</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="1853" href="#1853">1853</a> <em class="jxr_javadoccomment"> * This method opens an <code>InputStream</code> 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"> * <p></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"> * <pre></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"> * </pre></em>
-<a class="jxr_linenumber" name="1871" href="#1871">1871</a> <em class="jxr_javadoccomment"> * <p></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"> * <p></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++ >= 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++ > 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 ...]