使用Java从Linux和windows读取文件

使用Java从Linux和windows读取文件,java,Java,我经历了这一切,但没有得到正确的答案 我有conf.txt在Windows文件夹c:\winapp\Game\core\conf.txt 我在Linux文件夹中有conf.txt,/usr/Game/core/conf.txt 因此,我知道从Game文件夹开始的相对路径 如果不使用特定于操作系统的代码,比如System.getProperty(“”,我们有没有一种方法来编写一个可移植的Java程序?简单的答案是没有 我已经有好几年没有经常使用Windows了,所以我不知道“c:\winapp”是

我经历了这一切,但没有得到正确的答案

我有
conf.txt
在Windows文件夹
c:\winapp\Game\core\conf.txt

我在Linux文件夹中有
conf.txt
/usr/Game/core/conf.txt

因此,我知道从
Game
文件夹开始的相对路径


如果不使用特定于操作系统的代码,比如
System.getProperty(“”
,我们有没有一种方法来编写一个可移植的Java程序?

简单的答案是没有

我已经有好几年没有经常使用Windows了,所以我不知道“c:\winapp”是否是一个“标准”目录,但Java库中没有任何东西可以自动将Windows上的c:\winapp与Linux上的/usr关联起来

因此,您要么在运行时检测操作系统,并使用适当的路径(硬编码到应用程序中),要么使用System.getProperty(),并让用户设置系统属性

更好的方法可能是将配置文件放在用户的主目录中。 然后,您可以执行System.getProperty(“user.home”),用户无需进行任何设置。

简短回答:是

我希望你知道你的申请是如何包装的。例如

/core/conf.txt
/lib/*.jar
/bin/*.(sh|cmd|exe)
在这种情况下,您可以使用

public static void main(String[] args) throws Exception {
    String home = System.getenv("GAME_HOME"); // For dev environment.
    File appHome;

    if (home == null) {
        File libs = new File(Test.class.getProtectionDomain().getCodeSource().getLocation().toURI());
        appHome = new File(libs, "..");
    }
    else {
        appHome = new File(home);
    }

    appHome = appHome.getCanonicalFile();
    System.out.println("App home directory: " + appHome);
}

当然,测试类应该放在lib/*.jar文件中。

winapp
是产品安装程序创建的文件夹,很抱歉让您感到困惑