Java 基于Unix的系统上的File.separator

Java 基于Unix的系统上的File.separator,java,unix,Java,Unix,我开发了一个桌面应用程序,它执行一些文件写入和读取操作。要获取文件路径,我使用以下代码: static final String workingDir = System.getProperty("user.dir"); public static final String resourcesPath = workingDir + File.separator + "src" + File.separator; 在windows中,变量resourcesPath包含C:\app\sr

我开发了一个桌面应用程序,它执行一些文件写入和读取操作。要获取文件路径,我使用以下代码:

static final String workingDir = System.getProperty("user.dir");

public static final String resourcesPath = 
    workingDir + File.separator + "src" + File.separator;
在windows中,变量
resourcesPath
包含
C:\app\src\
,但当我在基于unix的系统上执行应用程序时,这将返回我
/home/eboss\src\

在基于unix的系统中,
/home/eboss
是来自
system.getProperty(“user.dir”)的路径
这是正确的,但是当我使用
File.separator时,它会在路径后面附加
\
这个。结果我得到(没有这样的文件或目录)错误


为什么基于unix的系统返回错误路径

听起来您在Unix上运行这个程序时使用的JVM有问题

前提是:

  • 您正在使用一个正确的JVM,例如来自Sun/Oracle的JVM,并且

  • 您没有用Windows JVM中的文件覆盖JVM的
    jar
    文件

…该代码将正常工作。您需要重新安装JVM并确保没有覆盖任何JVM JAR


(我无法让我的Linux JVM使用Windows
rt.jar
[包含
File.class
]的那一个],但我不能100%保证这是不可能的。当我尝试时,我能做的最好的事情就是让我的JVM拒绝初始化。)

为什么不使用“/”呢?是否有一个操作系统不理解“/”?我很难相信在显示的代码中确实会发生这种情况(对我来说不是这样)。您正在使用Sun/Oracle JVM和JDK吗?你在哪个系统上编译(这并不重要)?你使用的是将Java字节码转换成“本机”代码的东西吗?@Amogh:我无法用你的代码复制你的结果。当我在Windows上使用OracleJDK7编译并在Linux上运行它时,我在两种平台上都得到了正确的文件分隔符。从根本上说,你不应该得到这样的结果。您环境中的某些内容已损坏。@Amoh-不,这与您在何处以及如何编译它无关,但“bosslinux”上的JDK/JRE很可能已损坏。我无法想象会有JVM如此损坏。您的启动配置更有可能出现问题。例如,在命令行或等效命令行上提供
-Dfile.separator=X
可能会遇到麻烦……我正在使用eduBoss操作系统执行jar(bosslinux.in/eduBoss)。因此,根据@T.J.Crowder的问答命令,@T.J.Crowder在该操作系统上的
JVM
可能存在一些问题。我通过在选择任何路径时更改代码来解决问题,如果该路径包含
“\\\”
我回复了
“/”