Où mettre un fichier texte dans Grails, et comment obtenir le chemin

j'ai besoin de lire dans un .fichier txt dans un groovy classe afin d'interroger ligne par ligne. Mais je ne suis pas sûr dans quel dossier je l'ai mis dans mon application grails, et comment obtenir le chemin vers elle?

jusqu'à présent, j'ai essayé de le placer sous src et aussi dans un nouveau dossier web-app/txt

et j'ai essayé de le lire dans

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

et

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

en vain.

N'importe quel corps a des pointeurs?

23
demandé sur andy mccullough 2013-03-13 19:19:55

4 réponses

Grails est une Application Web Java, donc elle sera compilée dans un fichier sigle .war, avec tous les fichiers/classes/etc à l'intérieur. La plupart des conteneurs web déballent File pour accéder à ce fichier en tant que fichier.

Btw, vous pouvez placer votre fichier dans grails-app/conf, dans ce cas, il sera placé dans classpath, et vous serez en mesure d'y accéder à l'aide de:

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

Vous pouvez aussi mettre ce fichier dans un sous-répertoire, comme grails-app/conf/data et de la charge ***.getResourceAsStream('data/lexicon.txt')

33
répondu Igor Artamonov 2013-03-14 15:52:32

Vous pouvez mettre votre fichier sous web-app/

Exemple:

web-app/lexicon.txt

et puis dans votre controller ou service utiliser grailsApplication:

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

J'espère que cela aidera

20
répondu Roberto Perez Alcolea 2013-03-14 01:32:35

vous pouvez utiliser le chargement de ressources de Spring pour accéder au fichier. Avec cette méthode, vous pouvez accéder au fichier à partir d'un grain de printemps, ce qui signifie que les grains peuvent autowire la ressource à ses artefacts.

Voir ci-dessous pour les étapes suivantes exemples

  1. placez le fichier dans grails-app/conf/.
  2. créer une classe de détenteur de ressource dans src/groovy
  3. ajouter le détenteur de la ressource comme haricot de printemps dans grails-app/spring/resources.groovy
  4. puis autowire et utiliser la ressource là où vous en avez besoin

Etape 2:

package resource

import org.springframework.core.io.Resource

class ResourceHolder {
    Resource lexicon
}

Étape 3:

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

Etape 4:

class AnyGrailsService {
    def lexiconHolder

    void aMethodUsingTheLexicon() {
        File lexicon = lexiconHolder.lexicon.file

        /* Do stuff with the lexicon */
    }
11
répondu schmolly159 2013-03-13 16:10:01

dans Grails 2, Vous pouvez utiliser le Localisateur de ressources Grails

class MyService {
    def grailsResourceLocator

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

Conseil pratique: pour vous en moquer dans Spock, utilisez GroovyPageStaticResourceLoader

@TestFor(MyService)
class MyServiceSpec extends Specification {
    def setup() {
        service.grailsResourceLocator = Mock(GroovyPageStaticResourceLocator)
    }
}
7
répondu Keith 2014-08-20 18:08:37