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

java中windows与Unix上的文件路径问题,java,platform-independent,Java,Platform Independent,在我的程序中,我正在为单元测试读取一个资源文件。我将文件路径用作: \\\path\\\to\\\file 在我的机器(Windows)上运行良好。但在服务器(Unix)上,此操作失败,我必须将其更改为:/path/to/file 但是Java应该是独立于平台的。那么,这种行为不是出人意料吗?使用FileSystem.getSeparator()或System.getProperty(“file.separator”)而不是使用斜杠 编辑: 您可以通过FileSystems.getDefaul

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

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


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

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

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

获取
文件系统的实例,而不是使用斜杠

编辑:
您可以通过
FileSystems.getDefault
(JDK 1.7+)获取
文件系统的实例

您可以使用
File.separator
以平台无关的方式获取适当的字符。

您可以使用
File.separator
以平台无关的方式获取适当的字符。

Java是平台无关的。文件路径和某些系统调用不正确

只要路径是相对的,就可以使用
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));
// prints C:\TEMP\asd.txt if you specified -DconfigFile=C:\TEMP\asd.txt
System.out.println(System.getProperty("configFile"));
下一个问题是:如何指定该文件的位置?可能是相对路径上的文件。如果这对你的应用程序不可行,那么你可以让用户在系统属性中指定它:

java ... -DconfigFile=C:\TEMP\asd.txt .... -jar myapp.jar
然后您可以像这样访问它:

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

Java是独立于平台的。文件路径和某些系统调用不正确

只要路径是相对的,就可以使用
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));
// prints C:\TEMP\asd.txt if you specified -DconfigFile=C:\TEMP\asd.txt
System.out.println(System.getProperty("configFile"));
下一个问题是:如何指定该文件的位置?可能是相对路径上的文件。如果这对你的应用程序不可行,那么你可以让用户在系统属性中指定它:

java ... -DconfigFile=C:\TEMP\asd.txt .... -jar myapp.jar
然后您可以像这样访问它:

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

这是预期的行为

Java代码可在任何机器/操作系统上编译,前提是安装了正确的Java版本

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


当它与文件系统通信时,它使用该特定值;然后,文件系统试图找到您给它指定的路径;这就是为什么一种语法在Windows上可以正常工作,但在Linux上不起作用。

这是预期的行为

Java代码可在任何机器/操作系统上编译,前提是安装了正确的Java版本

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


当它与文件系统通信时,它使用该特定值;然后,文件系统试图找到您给它指定的路径;这就是为什么一种语法在Windows上运行良好,但在Linux上不起作用的原因。

更好的方法是:

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

更好的方法是:

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

相关帖子:相关帖子:您可能需要澄清如何获取
文件系统
实例您可能需要澄清如何获取
文件系统
实例