Grails Util从bootstrap读取文件

时间:2014-01-15 16:46:08

标签: grails

我的web-app文件夹中有一个txt文件,我想阅读。它包含很多应该在启动期间存储在某些数据库对象中的文本,所以我没有将文本放入bootstrap.groovy,而是在一个单独的Util-Class中编写了一个reader方法。 util-class放在Grails utils文件夹中,并注入bootstrap.groovy。 当运行“grails run-app”时,它在我的本地机器上运行完美,但我服务器上部署的战争只是说

  

2014-01-15 17:38:23,508 [localhost-startStop-1]错误   context.GrailsContextLoader - 初始化应用程序时出错:   null java.lang.IllegalArgumentException at   FileUtils.readFile(FileUtils.groovy:23)at   BootStrap $ _closure1.doCall(BootStrap.groovy:260)at   grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:308)     在   grails.util.Environment.executeForEnvironment(Environment.java:301)     在   grails.util.Environment.executeForCurrentEnvironment(Environment.java:277)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)     at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)     在java.util.concurrent.FutureTask.run(FutureTask.java:166)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:724)

这意味着这段代码:

        println ("PATH: " + org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().getRealPath('hilfethemen.txt'))

有什么建议吗?我已经尝试了很多,但很多博客文章已经过时了。谢谢!

编辑: 我的Bootstrap代码如下所示:

class BootStrap {

    def statladsService

    def init = { servletContext ->
 // read helptopics

        ArrayList<String> hilfethemen = new ArrayList<String>();


        String content = FileUtils.readFile("hilfethemen.txt")
        println ("STRING: " + content)
        if(content!=null) {
            for(String hilfethema : content.split("<hilfethema>")) {
                hilfethemen.add(hilfethema);
            }

            ArrayList<String> clearLines = new ArrayList<String>();

            for(String hilfethema : hilfethemen) {

                def page = new Page()

                for(String line : hilfethema.split("\n")) {
                    if(line.split("=")[0].equals("title")) {
                        // title
                        page.title=line.split("=")[1];
                    } else if(line.split("=")[0].equals("content")) {
                        // content
                        String lineContent=line.split("=")[1];
                        page.content=lineContent
                    }
                }
                page.save(flush:true)
            }
        }
     }
}

Util-Class实际上是这样的:

import org.apache.commons.io.IOUtils
import sun.nio.cs.StandardCharsets

import java.io.*;

public class FileUtils {

    /**
     * Reads a file and returns its content as UTF-8
     * @param path
     * @return
     */
    public static String readFile(String path) {

        String content = "";
        /*
        File fileDir = new File(path);
        if(!fileDir.exists()) {
            return null;
        }
        */

        println ("PATH: " + org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().getRealPath('hilfethemen.txt'))
         BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream(org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().getRealPath('hilfethemen.txt')), "UTF-8"));



        String str;

        try {
            while ((str = buf.readLine()) != null) {
                content+=str+"\n";
            }
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

        try {
            buf.close();
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        return content;
    }
}

1 个答案:

答案 0 :(得分:0)

知道了。即使我在控制器中使用这种代码,它也给了我错误。我决定检查我正在运行的Tomcat版本。可悲的是Tomcat 8接缝有一些像(http://mail-archives.apache.org/mod_mbox/tomcat-users/201308.mbox/%3C51FB92FE.4050408@gmail.com%3E)这样的错误应该在RC10中修复但是无论如何都不适用于Grails。 我刚刚降级到Tomcat 7,它现在​​正在运行...... 我应该睁大眼睛,下次不要安装alpha。谢谢你们。