使用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
是产品安装程序创建的文件夹,很抱歉让您感到困惑