2017-05-28 53 views
-1

我试图用Scala获取我的电脑上所有目录和列表中的所有文件列表。以下是我尝试解决该问题的两种不同方式。为什么我得到一个空指针异常?使用Scala获取计算机上所有目录的列表和所有文件的列表。

def fullDirList(directories: Array[String]): Array[String ] = { 
    directories.foldLeft(Array[String]()){ (x, y) => x ++: fullDirList(getSubDirList(y)) 
} 

def getFullDirList(directories: Array[String]): Array[String] = { 
    def loop(dir: Array[String], accDir: Array[String]): Array[String] = { 
     if (dir.isEmpty) accDir 
     else loop(dir.tail, accDir ++: getFullDirList(getSubDirList(dir.head))) 
    } // END loop() 
    loop(directories, Array[String]()) 
} // END getFullDirList() 

def getSubDirList(directoryName: String): Array[String] = { 
    (new File(directoryName)).listFiles.filter(_.isDirectory).map(_.getName) 
} 

def getFileArray(directoryName: String): Array[String] = { 
    (new File(directoryName)).listFiles.filter(_.isFile).map(_.getAbsolutePath) 
} 
+0

如果您提供有关异常位置的信息,将会更容易提供帮助。 – Zernike

回答

0

这是我最终提出的解决方案。尽管我确信你可以用foldRight做到这一点,但我很高兴解决方案能够工作。

def getDirList(directoryName: String): Array[String] = { 
    (new File(directoryName)).listFiles.filter(_.isDirectory).map(_.getAbsolutePath) 
} 
def getAllDirs(dir: String): Array[String] = { 
    val dirList = getDirList(dir) 
    def loop(directories: Array[String], accList: Array[String]): Array[String] = { 
     if(directories.isEmpty) accList 
     else loop(directories.tail, accList ++: getDirList(directories.head)) 
    } 
    loop(dirList, Array[String]()) 
} 
+0

这个答案是错误的。当我尝试做这个程序时,我知道的很少。 – Xander

相关问题