26

行ごとに問い合わせるために、.txtファイルをGroovyクラスに読み込む必要があります。しかし、grailsアプリでどのフォルダーに配置したのか、またそのパスを取得する方法がわかりません。

これまでのところsrc、新しいフォルダの下と中に配置してみましたweb-app/txt

そして私はそれを読むために以下を試しました

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

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

無駄に。

どんな体にもポインタがありますか?

4

4 に答える 4

38

GrailsはJavaWebアプリケーションであるため、.warすべてのファイル/クラスなどが含まれる単一のファイルにコンパイルされます。ほとんどのWebコンテナは解凍しますwarが、保証はありません。したがって、Fileこのファイルにファイルとしてアクセスするために使用することはお勧めできません。

ところで、あなたはあなたのファイルをに置くことができますgrails-app/conf、この場合それはに置かれclasspathます、そしてあなたはそれを使用することによってそれにアクセスすることができます:

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

このファイルを次のようにサブディレクトリに配置して、次のようgrails-app/conf/dataにロードすることもできます。***.getResourceAsStream('data/lexicon.txt')

于 2013-03-13T15:29:00.867 に答える
22

あなたはweb-app/の下にあなたのファイルを置くことができます

例:

web-app/lexicon.txt

次に、コントローラーまたはサービスでgrailsApplicationを使用します。

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

お役に立てれば

于 2013-03-14T01:32:35.167 に答える
12

Springのリソースロードを使用してファイルにアクセスできます。このメソッドを使用すると、Spring Beanからファイルにアクセスできます。つまり、Grailsはリソースをそのアーティファクトに自動配線できます。

次の手順の例については、以下を参照してください

  1. ファイルをに配置しますgrails-app/conf/
  2. でリソースホルダークラスを作成するsrc/groovy
  3. リソースホルダーをSpringBeanとして追加しますgrails-app/spring/resources.groovy
  4. 次に、必要な場所でリソースを自動配線して使用します

ステップ2:

package resource

import org.springframework.core.io.Resource

class ResourceHolder {
    Resource lexicon
}

ステップ3:

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

ステップ4:

class AnyGrailsService {
    def lexiconHolder

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

        /* Do stuff with the lexicon */
    }
于 2013-03-13T16:10:01.837 に答える
7

Grails 2では、GrailsResourceLocatorを使用できます

class MyService {
    def grailsResourceLocator

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

便利なヒント:Spockでこれをモックするには、GroovyPageStaticResourceLoaderを使用します

@TestFor(MyService)
class MyServiceSpec extends Specification {
    def setup() {
        service.grailsResourceLocator = Mock(GroovyPageStaticResourceLocator)
    }
}
于 2014-08-20T18:08:37.707 に答える