2017-07-19 2 views
0

In einem Stück Gradle Code möchte ich einen aktuellen Ordnernamen erhalten, ohne den Pfad zu teilen. Aber alle Versuche, die ich versuchte:Warum Groovy und Java einen Punkt anstelle des Dateinamens zurückgeben?

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

, geben Sie einen Punkt "." anstelle des Namens. Gibt es eine Funktion, die den Namen angibt, keine andere Zeichenfolge, mit der der Ordner adressiert werden könnte?

Was interessant ist, wenn ich benutze:

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

, es zu sehen ist, dass der Pfad-String sieht wie:

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

So ist es einfach falsch ist die letzte Teilkette zu nehmen, nachdem '\'. Aber alle diese drei Funktionen nehmen nicht den Namen des wirklich aktuellen Ordners, sondern den letzten "."!

Antwort

3

Gradle basiert auf Groovy, einer JVM-Sprache, genau wie Java. Um das aktuelle Arbeitsverzeichnis zu erhalten, können Sie einfach das gleiche ways you would use in Java verwenden. Der folgende Code gibt Ihnen beispielsweise den Namen des Arbeitsverzeichnisses, nicht den vollständigen Pfad (überprüfen Sie die Antwort von Frans).

new File('').absoluteFile.name 

jedoch erwähnen Sie bitte, dass in Gradle, sollten Sie nicht erstellen oder Zugriff auf Dateien aus dem aktuellen Arbeitsverzeichnis, aber aus dem Projekt (project.projectDir) oder bauen (project.buildDir) Verzeichnisse, da Sie versehentlich Projekte bauen könnten aus niedrigere Verzeichnisse, z weil Gradle nach settings.gradle Skripts in übergeordneten Verzeichnissen sucht.

+0

Ausgezeichnet! Richtig die richtige Funktionskombination, und auch eine sehr nützliche zusätzliche Information. Ich habe das Task-FROM-Child-Verzeichnis gestartet und wollte es von dort aus ausführen. Ich wusste nicht, dass es keine Art von Arbeit ist. – Gangnus

+0

Der Ordner-Name, den ich sowieso brauche - um zu überprüfen, dass die Aufgabe aus dem richtigen Ordner aufgerufen wurde. Wenn nicht, würde es einen Haufen Probleme schaffen. Es ist schade, dass ich Ihnen nicht zwei Stimmen geben kann. – Gangnus

0

Ist das nicht

new File("").absolutePath 

, was Sie suchen?

+0

ich für Namen suchen, nicht den ganzen Weg, auf jeden Fall. Ich habe bereits ein Working Piece, das die passende Teilkette aus dem absoluten Pfad herausschneidet. Aber ich kann nicht glauben, dass der einzige Weg so peinlich ist. – Gangnus

0

Wir sollten den absoluten Pfad auf diese Weise nicht wirklich abrufen.

In Gradle können Sie project.projectDir verwenden Sie den Projektpfad oder rootProject wenn ihr ein Multiprojekt zu erhalten oder wenn Sie einen Pfad der Datei erhalten project.file('yourfile')

Verwandte Themen