搜尋

首頁  >  問答  >  主體

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

写了一个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;
    }
}

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

PHP中文网PHP中文网2810 天前654

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:07:18

    rc.local由init進程調度,你沒有設定當前目錄,那麼它在執行的時候,當前目錄就是/,跟当前脚本(rc.local)所在目錄沒關係,當然沒有你需要的myapp.conf檔案

    要嘛你在rc.local裡加一句 cd /path/to/jar
    要嘛在java程式碼中製定myapp.conf檔的绝对路径

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:07:18

    1.對於myapp.jar程序,能否接受參數的呢?然後透過執行java -jar /opt/agent/myapp.jar /path/to/myapp.conf指令,這樣去指定設定檔的路徑,然後最終將這個路徑參數傳給GetFile方法。

    下面是笨的方法
    2. 你可不可以將myapp.conf固定在一個路徑下呢
    然後呼叫GetFile(為什麼不是getFile)方法的時候傳入那個固定的路徑

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:07:18

    CLASSPATH這個變數不再需要,別被國內誤人子弟的資料誤導。 JDK6以後版本預設加入這個變量,不建議自己亂改,會導致各種問題。而且java有-cp參數暫時增加classpath運行程序,不再需要這個變量,也不應該在初始化的時候設定這個變數。

    其次就是相對路徑的問題,雖然用著方便,但是會受到目前目錄的影響。建議健全的解決方案是讓程式自己判斷自己所在的路徑,以自己目前目錄為基準,拼接相對路徑成為絕對路徑。

    回覆
    0
  • 取消回覆