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?
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')
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
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
- placez le fichier dans
grails-app/conf/
. - créer une classe de détenteur de ressource dans
src/groovy
- ajouter le détenteur de la ressource comme haricot de printemps dans
grails-app/spring/resources.groovy
- 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 */
}
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)
}
}