2011-12-24 41 views

Trả lời

44
new java.io.File(dirName).listFiles.filter(_.getName.endsWith(".txt")) 
2

Hiện tại, bạn nên sử dụng thư viện Java để thực hiện việc này.

13

Lớp Java File thực sự là tất cả những gì bạn cần, mặc dù thật dễ dàng để thêm một số Scala tốt để lặp qua thư mục dễ dàng hơn.

import scala.collection.JavaConversions._ 

for(file <- myDirectory.listFiles if file.getName endsWith ".txt"){ 
    // process the file 
} 
+1

Tôi đã cố gắng chỉnh sửa hai lỗi chính tả nhỏ, nhưng vì nó chỉ là hai ký tự, nó sẽ không cho phép tôi. Tên của gói là 'collection' và bạn đang thiếu dấu ngoặc đơn đóng trong' for'. – Eduardo

15

Phiên bản JDK7, sử dụng lớp DirectoryStream mới là:

import java.nio.file.{Files, Path} 
Files.newDirectoryStream(path) 
    .filter(_.getFileName.toString.endsWith(".txt")) 
    .map(_.toAbsolutePath) 

Thay vì một chuỗi, này trả về một con đường, trong đó có vô số các phương pháp tiện dụng trên nó, như 'tương đối hóa' và ' subpath '.

Lưu ý rằng bạn cũng sẽ cần phải nhập import scala.collection.JavaConversions._ để bật interop với bộ sưu tập Java.

+0

+1 để sử dụng java.nio – jasonoriordan

+1

Tôi không biết nếu điều này đã làm việc trong các phiên bản trước, nhưng bây giờ tôi nhận được lỗi 'bản đồ giá trị không phải là một thành viên của java.nio.file.DirectoryStream [java.nio.file. Đường dẫn] ' – rumtscho

+0

Tôi nhận được lỗi đó bằng cách sử dụng Java 8 –

Các vấn đề liên quan