2017-05-28 46 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

相關問題