26 Stimmen

Wo muss ich eine Textdatei in Grails platzieren und wie erhalte ich den Pfad

Ich muss eine .txt-Datei in eine Groovy-Klasse einlesen, um sie Zeile für Zeile zu untersuchen. Aber ich bin mir nicht sicher, in welchen Ordner ich sie in meiner Grails-App legen soll und wie ich den Pfad dazu bekomme?

Bisher habe ich versucht, sie unter src und auch in einem neuen Ordner web-app/txt zu platzieren

und ich habe folgendes versucht, um sie einzulesen:

fileIn = new File('/lexicon.txt').text

und

fileIn = new File('txt/lexicon.txt').text

ohne Erfolg.

Hat jemand irgendwelche Tipps?

38voto

Igor Artamonov Punkte 34640

Grails ist eine Java-Webanwendung, daher wird sie in eine einzige Datei .war kompiliert, mit allen Dateien/Klassen/etc. darin. Die meisten Webcontainer entpacken war, jedoch gibt es keine Garantie, sodass es keine gute Idee ist, Datei zu verwenden, um auf diese Datei als Datei zuzugreifen.

Übrigens kannst du deine Datei in grails-app/conf platzieren, in diesem Fall wird sie im classpath platziert, und du kannst darauf zugreifen, indem du Folgendes verwendest:

InputStream lexicon = this.class.classLoader.getResourceAsStream('lexicon.txt')

Du könntest diese Datei auch in ein Unterverzeichnis wie grails-app/conf/data legen und sie als ***.getResourceAsStream('data/lexicon.txt') laden

22voto

Sie können Ihre Datei unter web-app/ ablegen

Beispiel:

web-app/lexicon.txt

Und dann in Ihrem Controller oder Service grailsApplication verwenden:

Klasse MyService {
    def grailsApplication
    public myMethod() {
        Datei myFile = grailsApplication.mainContext.getResource("lexicon.txt").file
    }
}

Hoffentlich hilft das

13voto

schmolly159 Punkte 3861

Sie können das Ressourcenladen von Spring verwenden, um auf die Datei zuzugreifen. Mit dieser Methode können Sie von einem Spring-Bean aus auf die Datei zugreifen, was bedeutet, dass Grails die Ressource in seine Artefakte einfügen kann.

Siehe unten für Beispiele der folgenden Schritte

  1. Platzieren Sie die Datei in grails-app/conf/.
  2. Erstellen Sie eine Ressourcenhalterklasse in src/groovy
  3. Fügen Sie den Ressourcenhalter als Spring-Bean in grails-app/spring/resources.groovy hinzu
  4. Dann verdrahten Sie die Ressource und verwenden Sie sie, wo immer Sie sie benötigen

Schritt 2:

paket ressource

import org.springframework.core.io.Resource

Klasse ResourceHolder {
    Resource lexicon
}

Schritt 3:

bohnen = {
    lexiconHolder(resource.ResourceHolder) {
        lexicon = 'classpath:lexicon.txt'
    }
}

Schritt 4:

Klasse AnyGrailsService {
    def lexiconHolder

    void eineMethodeDieDasLexikonBenutzt() {
        Datei lexikon = lexiconHolder.lexicon.file

        /* Machen Sie etwas mit dem Lexikon */
    }

7voto

Keith Punkte 161

In Grails 2 kannst du den Grails-Ressourcen-Locator verwenden

class MyService {
    def grailsResourceLocator

    myMethod() {
        def fileIn = grailsResourceLocator.findResourceForURI('/txt/lexicon.txt').file
    }
}

Nützlicher Tipp: Um dies in Spock zu mocken, verwende GroovyPageStaticResourceLoader

@TestFor(MyService)
class MyServiceSpec extends Specification {
    def setup() {
        service.grailsResourceLocator = Mock(GroovyPageStaticResourceLocator)
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X