src/Pure/General/file.scala
changeset 69293 72a9860f8602
parent 66693 02588021b581
child 69299 2fd070377c99
equal deleted inserted replaced
69292:06fda16e50fb 69293:72a9860f8602
     9 
     9 
    10 import java.io.{BufferedWriter, OutputStreamWriter, FileOutputStream, BufferedOutputStream,
    10 import java.io.{BufferedWriter, OutputStreamWriter, FileOutputStream, BufferedOutputStream,
    11   OutputStream, InputStream, FileInputStream, BufferedInputStream, BufferedReader,
    11   OutputStream, InputStream, FileInputStream, BufferedInputStream, BufferedReader,
    12   InputStreamReader, File => JFile, IOException}
    12   InputStreamReader, File => JFile, IOException}
    13 import java.nio.file.{StandardOpenOption, StandardCopyOption, Path => JPath,
    13 import java.nio.file.{StandardOpenOption, StandardCopyOption, Path => JPath,
    14   Files, SimpleFileVisitor, FileVisitResult}
    14   Files, SimpleFileVisitor, FileVisitOption, FileVisitResult}
    15 import java.nio.file.attribute.BasicFileAttributes
    15 import java.nio.file.attribute.BasicFileAttributes
    16 import java.net.{URL, MalformedURLException}
    16 import java.net.{URL, MalformedURLException}
    17 import java.util.zip.{GZIPInputStream, GZIPOutputStream}
    17 import java.util.zip.{GZIPInputStream, GZIPOutputStream}
    18 import java.util.regex.Pattern
    18 import java.util.regex.Pattern
       
    19 import java.util.EnumSet
    19 
    20 
    20 import org.tukaani.xz.{XZInputStream, XZOutputStream}
    21 import org.tukaani.xz.{XZInputStream, XZOutputStream}
    21 
    22 
    22 import scala.collection.mutable
    23 import scala.collection.mutable
    23 import scala.util.matching.Regex
    24 import scala.util.matching.Regex
   147   }
   148   }
   148 
   149 
   149   def find_files(
   150   def find_files(
   150     start: JFile,
   151     start: JFile,
   151     pred: JFile => Boolean = _ => true,
   152     pred: JFile => Boolean = _ => true,
   152     include_dirs: Boolean = false): List[JFile] =
   153     include_dirs: Boolean = false,
       
   154     follow_links: Boolean = true): List[JFile] =
   153   {
   155   {
   154     val result = new mutable.ListBuffer[JFile]
   156     val result = new mutable.ListBuffer[JFile]
   155     def check(file: JFile) { if (pred(file)) result += file }
   157     def check(file: JFile) { if (pred(file)) result += file }
   156 
   158 
   157     if (start.isFile) check(start)
   159     if (start.isFile) check(start)
   158     else if (start.isDirectory) {
   160     else if (start.isDirectory) {
   159       Files.walkFileTree(start.toPath,
   161       val options =
       
   162         if (follow_links) EnumSet.of(FileVisitOption.FOLLOW_LINKS)
       
   163         else EnumSet.noneOf(classOf[FileVisitOption])
       
   164       Files.walkFileTree(start.toPath, options, Integer.MAX_VALUE,
   160         new SimpleFileVisitor[JPath] {
   165         new SimpleFileVisitor[JPath] {
   161           override def preVisitDirectory(path: JPath, attrs: BasicFileAttributes): FileVisitResult =
   166           override def preVisitDirectory(path: JPath, attrs: BasicFileAttributes): FileVisitResult =
   162           {
   167           {
   163             if (include_dirs) check(path.toFile)
   168             if (include_dirs) check(path.toFile)
   164             FileVisitResult.CONTINUE
   169             FileVisitResult.CONTINUE