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 |