windows 上的文件路径问题与 java 中的 Unix 相比

File path issue on windows vs Unix in java

在我的程序中,我正在读取一个单元测试的资源文件。我使用文件路径为:

\\path\\to\\file

在我的机器上(Windows)运行良好。但是在服务器(Unix)上,这失败了,我必须将其更改为:/path/to/file

但是 Java 应该是独立于平台的。那么这种行为是不是出乎意料?

使用 FileSystem.getSeparator()System.getProperty("file.separator") 而不是使用斜杠。

编辑: 您可以通过 FileSystems.getDefault (JDK 1.7+)

获取 FileSystem 的实例

您可以使用 File.separator 以 platform-independent 的方式获取适当的字符。

Java 与平台无关。文件 path-es 和一些系统调用不是。

只要路径是相对的,就可以用File.separator:

    String path = "path" + File.separator + "to" + File.separator + "file";
    System.out.println(path); // prints path\to\file on windows

有时可以选择提供属性文件并让用户定义该实际文件的路径。这样完整的路径也可以。您可以这样阅读属性:

    Properties props = new Properties();
    props.load(new FileInputStream(filePath));

下一个问题是:如何指定那个文件的位置?这可能是相对路径上的文件。如果这对您的应用不可行,那么您可以让用户在系统中指定它 属性:

java ... -DconfigFile=C:\TEMP\asd.txt .... -jar myapp.jar

然后你可以这样访问它:

// prints C:\TEMP\asd.txt if you specified -DconfigFile=C:\TEMP\asd.txt
System.out.println(System.getProperty("configFile"));

这是预期的行为。

Java code 编译 在任何 machine/OS 上只要你有正确版本的 Java 安装在上面。

但是,在 运行 时,您的代码只看到一个变量 value,就像另一个变量一样,恰好是 \path\to\file

当它与文件系统对话时,它使用那个特定的值;然后文件系统试图找到你给它的路径;这就是为什么一种语法在 Windows 上工作正常但在 Linux.

上不起作用的原因

更好的方法是:

val pathUri = Paths.get(".//src//test//res//file.txt").toUri()
val is = FileInputStream((File(pathUri)))