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)))
相关帖子:相关帖子:您可能需要澄清如何获取文件系统
实例您可能需要澄清如何获取文件系统
实例