当前位置: 首页 > 知识库问答 >
问题:

Grails Util从引导程序读取文件

祝嘉懿
2023-03-14

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

2014-01-15 17:38:23508[localhost-startStop-1]错误上下文。GrailsContextLoader-初始化应用程序时出错:grails.util.Environment.evaluateEnvironmentalSpecificBlock(Environment.java:308)处的BootStrap$_closure1.doCall(BootStrap.groovy:260)处的FileUtils.readFile(FileUtils.groovy:23)处的java.lang.IllegalArgumentException为空java.util.concurrent.Executors$RunnableAdapter.call(Executtors.java:471)处的grails.util.Environment.executeForCurrentEnvironment(Environonment.java:277),java.util.concurrnt.FutureTask$Sync.inerRun(FutureTask.java:334)处的java.util concurrent.Future Task.run(FutureTask.java:166)处的java(Future),javajava.lang.Thread.run(Thread.java:724)处的java.util.concurrent.ThreadPoolExecutor$Worker.run

它的意思是这段代码:

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

有什么建议吗?我尝试了很多,但很多博客文章都过时了。非常感谢。

编辑:我的引导代码如下所示:

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类实际上是这样的:

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个答案

鲍健柏
2023-03-14

明白了。甚至当我在控制器中使用这种代码时,它也会给我错误。我决定检查我运行的是哪个Tomcat版本。遗憾的是,Tomcat 8似乎有一些错误,如(http://mail-archives . Apache . org/mod _ mbox/Tomcat-users/201308 . mbox/< 51 FB 92 Fe . 4050408 @ Gmail . com >)应该在RC10中得到修复,但无论如何不能与Grails一起工作。我刚刚降级到Tomcat 7,它现在可以工作了...我应该睁大眼睛,下次不要安装阿尔法。谢谢你们。

 类似资料:
  • 你好,我是新来的卢森我已经创建了使用卢森索引。但是当我从索引中搜索时,我能够得到一个查询词和文件名的出现,这些文件包含查询词。我无法查看我创建了索引的文件的内容,有人能帮忙吗,请提前感谢 我正在使用此代码读取索引。

  • 我们现在开始准备编写AngularJS应用——phonecat。这一步骤(步骤0),您将会熟悉重要的源代码文件,学习启动包含AngularJS种子项目的开发环境,并在浏览器端运行应用。 进入angular-phonecat目录,运行如下命令: git checkout -f step-0 该命令将重置phonecat项目的工作目录,建议您在每一学习步骤运行此命令,将命令中的数字改成您学习步骤对应的

  • 概览 这一节解释了AngularJS初始化的过程,以及需要的时候你该如何修改AngularJS的初始化。 AngularJS的 <script> 标签 这个示例展示了我们推荐的整合AngularJS的方法,它被称之为“自动初始化”。 <!doctype html> <html xmlns:ng="http://angularjs.org" ng-app> <body> ..

  • 这是我的选项2选项 但它给出了一个错误的说法 java.io.FileNotFoundException:C:\users\businesssupport\documents\netBeansProjects\InvoiceGenerator\resources\hemaslogo.jpg(系统找不到指定的路径)

  • 实际上,我不确定是否有可能强制其他应用程序从返回所需字节的Java进程中读取文件,而不是从磁盘中读取文件,所以首先,这些信息可能会有所帮助。 你也可以忽略强迫的想法!我是否可以从我的java应用程序中打开其他应用程序,例如Adobe Acrobat Reader,并将字节注入其中,而不是单独打开它并用它读取pdf文件? 如果可能的话,有人能解释一下吗?我在网上搜索了太多,但没有找到答案。 你可能还

  • 问题内容: 我正在尝试实现基本的词法分析器。目前,我在文件解析方面陷入困境。 这是我的栏位,称为“ p ++。ppp” 解析文件时,我得到:但是p ++。ppp是文件名! 同样,当我调试时,它读取文件名,然后退出。我想念什么? 问题答案: 您误解了的API 。从文档的构造函数: 构造一个新的Scanner,该扫描器生成从指定字符串扫描的值。 参数: 源 -一个字符串,扫描 这不是文件名-只是一个字