行ごとに問い合わせるために、.txtファイルをgroovyクラスに読み込む必要があります。しかし、私はそれを私のgrailsアプリのどのフォルダーに入れ、どのようにそのパスを取得するのかわかりませんか?
これまでのところ、src
の下と新しいフォルダweb-app/txt
に配置してみました
そして私はそれを読むために以下を試しました
fileIn = new File('/Lexicon.txt').text
そして
fileIn = new File('txt/Lexicon.txt').text
無駄に。
体にはポインタがありますか?
GrailsはJava Webアプリケーションなので、すべてのファイル/クラス/ etcが含まれた単一のファイル_.war
_にコンパイルされます。ほとんどのWebコンテナはwar
を解凍しますが、保証はありません。そのため、File
を使用してこのファイルにファイルとしてアクセスすることはお勧めできません。
ところで、ファイルを_grails-app/conf
_に配置できます。この場合、ファイルはclasspath
に配置され、次のようにしてアクセスできます。
_InputStream Lexicon = this.class.classLoader.getResourceAsStream('Lexicon.txt')
_
このファイルを_grails-app/conf/data
_のようなサブディレクトリに配置し、***.getResourceAsStream('data/Lexicon.txt')
としてロードすることもできます。
ファイルをweb-app /の下に置くことができます
例:
web-app/Lexicon.txt
次に、コントローラーまたはサービスでgrailsApplicationを使用します。
class MyService {
def grailsApplication
public myMethod() {
File myFile = grailsApplication.mainContext.getResource("Lexicon.txt").file
}
}
お役に立てれば
Springのリソース読み込みを使用して、ファイルにアクセスできます。このメソッドを使用すると、Spring Beanからファイルにアクセスできます。つまり、Grailsはリソースをアーティファクトに自動配線できます。
以下の手順の例については、以下を参照してください
grails-app/conf/
に配置します。src/groovy
にリソースホルダークラスを作成するgrails-app/spring/resources.groovy
に追加しますステップ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 */
}
Grails 2では、Grails Resource Locatorを使用できます
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)
}
}