2017-07-19 36 views
0

在一段Gradle代碼中,我想獲取當前文件夾名稱而不拆分路徑。但我嘗試過的所有嘗試:爲什麼Groovy和Java返回一個點而不是文件名?

Paths.get(".").getFileName() 
new File(".").getName() 
new File(".").name 

,返回一個點「。」而不是名稱。是否有一些函數提供了名稱,而不是另一個字符串,通過它可以解決該文件夾?

有趣的是,如果我使用:

String currentDirPath = new File(".").absolutePath 
    println currentDirPath 
    currentDirPath = currentDirPath.substring(0,currentDirPath.lastIndexOf("\\")) 
    println currentDirPath 
    String currentDir = currentDirPath.substring(currentDirPath.lastIndexOf("\\")+1) 

,可以看出,該路徑字符串看起來:

C:\Users\543829657\workspace\dev.appl.ib.cbl\application\. 

所以,這簡直是不正確的坐最後一個子之後 '\'。但是,所有這三個函數都不是真正實際文件夾名稱的名稱,而是最後一個「。」!

回答

3

Gradle建立在Groovy之上,它是一種Java語言的JVM語言。因此,要獲得當前的工作目錄,您可以簡單地使用相同的ways you would use in Java。作爲一個例子,下面的代碼會給你工作目錄的名稱,而不是完整的路徑(檢查Frans答案)。

new File('').absoluteFile.name 

但是,請提的是,在搖籃,你不應該從當前工作目錄中創建或訪問文件,而是從項目(project.projectDir)或建(project.buildDir)目錄,因爲你可能會意外地建立從項目較低的目錄,例如因爲Gradle會在父目錄中檢查settings.gradle腳本。

+0

優秀!正確的功能組合,也是一個非常有用的額外信息。我從任何子目錄啓動任務,並想從那裏運行它。我不知道這不是工作的方式。 – Gangnus

+0

無論如何我需要的文件夾名稱 - 用於檢查是否從正確的文件夾調用了該任務。如果不是,它會造成一堆麻煩。很遺憾,我不能給你兩票。 – Gangnus

0

是不是

new File("").absolutePath 

你在找什麼?

+0

我找的名稱,而不是整個路徑,絕對路徑。我已經有一個工作部分從絕對路徑中切出合適的子串。但我不能相信唯一的辦法是如此尷尬。 – Gangnus

0

我們不應該真的以這種方式檢索絕對路徑。

在搖籃中,可以使用project.projectDir拿到項目路徑或rootProject如果多項目,或者如果你想獲得的文件的project.file('yourfile')

相關問題