我的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;
}
}
答案 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。谢谢你们。