Java /,//和File.Separator

Java /,//和File.Separator,java,Java,两者之间有什么区别 fis =new FileInputStream(path+File.separator+"src"+File.separator+"main"+File.separator+"java"+File.separator+"com"+File.separator+"resources"+File.separator+"config.properties");

两者之间有什么区别

fis =new FileInputStream(path+File.separator+"src"+File.separator+"main"+File.separator+"java"+File.separator+"com"+File.separator+"resources"+File.separator+"config.properties");

fis =new FileInputStream(path+"/src/main/java/com/resources/config.properties");

fis =new FileInputStream(path+"\\src\\main\\java\\com\\resources\\config.properties");

我的老师告诉我使用File.separator,因为它与平台无关,但在互联网上,我读到的“/”可以在Mac和Windows上使用。我在windows上尝试了“/”,效果很好。如果“/”适用于Mac和Windows,为什么我们需要使用File.separator?

正斜杠有时适用于Windows。文件系统和内核在路径名中等价地处理“/”和“\”。在Windows NT 2000、XP、Vista、7、8、10系列中一直如此,但在基于DOS的Windows中却从未如此

应用程序代码不一定如此方便。由不了解此约定的人编写的代码可能不理解“/”

此外,还有命令行处理的问题,“/”可能表示开关而不是路径

因此,“Windows”本身理解“/”和“\”在路径名中是等效的,但并非所有在Windows中运行的代码都知道这一点

tl;dr-有时有效,有时无效。

只需使用java.io.File或java.nio.Path进行所有文件处理,您甚至不需要在笨拙的字符串连接中引用File.separator

文件和路径类都会自动将正斜杠更正为platform File.separator,因此正斜杠始终适用于Windows上的Java

尝试生成相同操作系统路径并避免使用+的示例:

String path = "somedir";
Path a = Path.of(path, "src", "main", "java", "com", "resources", "config.properties");
Path b = Path.of(path, "src/main/java/com/resources/config.properties");
Path c = Path.of(path).resolve("src/main/java/com/resources/config.properties");
File d = new File(path, "src/main/java/com/resources/config.properties");

在Windows上使用正确的分隔符=>somedir\src\main\java\com\resources\config.properties。如果您没有JDK11+,那么用Path.get JDK7+替换Path.of吧。

对于一个现代应用程序,您可能不需要这样做,但是为什么您要硬编码文件分隔符,并希望它们能够在每个平台上工作,而Java提供了一种干净、简单、独立于平台的方法来实现它呢?这类事情可以防止将来出现非常令人沮丧的bug,如果你想让代码在多个平台上运行,那么让代码尽可能的安全和可移植是一种很好的做法,而Java一直都是这样。这在前面的一个线程中得到了彻底的回答。看:非常感谢!读取资源时,通常不会将其作为文件读取,因为大多数Java应用程序都打包为.jar文件,单个.jar文件中的条目本身不是文件。相反,这样的条目是使用读取的,它接受一个不是文件名的字符串参数。参数是相对URL,在URL中,所有平台上的文件分隔符始终为正斜杠/正斜杠。