bash执行java程序时读取文件问题

发布于 2022-08-31 09:24:59 字数 1394 浏览 17 评论 0

写了一个java程序,程序启动时会读取和jar包统计目录的myapp.conf文件
在linux中通过java -jar myapp.jar的方式可以正常启动程序

但是在把命令加入到rc.local后却无法启动,查看日志发现是不能读取到myapp.conf文件

rc.local文件

#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
export JAVA_HOME=/usr/java/jdk1.7.0_71  
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar  
export PATH=$PATH:$JAVA_HOME/bin
java -jar /opt/agent/myapp.jar > /opt/agent/myapp.out 2>&1 &

是不是rc.local在执行java程序时会认为脚本所在目录为执行目录?

java读取文件的方法

public static String GetFile(String fileName){
    String strContent = "";
    try {
        String strEncoder = GetEncoder(fileName);
        BufferedReader biFile = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),strEncoder));
        String strSingleLine;
        while ((strSingleLine = biFile.readLine()) != null) {
            strContent += strSingleLine;
            strContent += "\n";
        }
        biFile.close();

    }
    catch (Exception e){
        System.out.println(e.getLocalizedMessage());
    }
    finally {
        return strContent;
    }
}

各位帮忙看看应该怎么办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月亮坠入山谷 2022-09-07 09:24:59

rc.local由init进程调度,你没有设置当前目录,那么它在执行的时候,当前目录就是 /,跟当前脚本(rc.local)所在目录没关系,当然没有你需要的myapp.conf文件

要么你在rc.local里加一句 cd /path/to/jar
要么在java代码中制定myapp.conf文件的绝对路径

阿楠 2022-09-07 09:24:59

1.对于myapp.jar程序,能否接受参数的呢?然后通过执行java -jar /opt/agent/myapp.jar /path/to/myapp.conf命令,这样去指定配置文件的路径,然后最终将这个路径参数传给GetFile方法。

下面是笨的方法
2. 你可不可以将myapp.conf固定在一个路径下呢
然后调用GetFile(为什么不是getFile)方法的时候传入那个固定的路径

帅的被狗咬 2022-09-07 09:24:59

CLASSPATH这个变量不再需要,别被国内误人子弟的资料误导。JDK6以后版本默认添加这个变量,不建议自己乱改,会导致各种问题。而且java有-cp参数临时增加classpath运行程序,不再需要这个变量,也不应该在初始化的时候设置这个变量。

其次就是相对路径的问题,虽然用着方便,但是会受到当前目录的影响。建议健壮的解决方案是让程序自己判断自己所在的路径,以自己当前目录为基准,拼接相对路径成为绝对路径。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文