Java中与文件系统无关的文件和路径?
我正在使用Java8编写一个与文件系统交互的应用程序。为了使测试更容易,我在我的方法中注入了一个Java中与文件系统无关的文件和路径?,java,file,unit-testing,Java,File,Unit Testing,我正在使用Java8编写一个与文件系统交互的应用程序。为了使测试更容易,我在我的方法中注入了一个文件系统,它可以被替换出来进行测试。我目前在单元测试中使用jimfs,在生产中使用DefaultFileSystem.getFileSystem() 我希望我的代码是平台独立的,并且在单元测试和生产之间是可移植的,但是,我认为标准库中的类可能会阻止这一点 例如,java.io.File包含以下内容: private static final FileSystem fs = DefaultFileSys
文件系统
,它可以被替换出来进行测试。我目前在单元测试中使用jimfs
,在生产中使用DefaultFileSystem.getFileSystem()
我希望我的代码是平台独立的,并且在单元测试和生产之间是可移植的,但是,我认为标准库中的类可能会阻止这一点
例如,java.io.File
包含以下内容:
private static final FileSystem fs = DefaultFileSystem.getFileSystem();
似乎File
总是引用真实的文件,这对于我的单元测试来说是个问题
另一方面,Path
只是一个接口,它应该使事情变得简单,只是它有一个创建文件的方法
File toFile();
- 哪些Java类与真正的文件系统相关联
- 我写
可移植代码的选项是什么李>文件系统
file
似乎总是指向WinNTFileSystem
,这看起来真的很奇怪吗?这在Java 8中似乎已发生更改。Path
s声明当路径未绑定到默认提供程序时,toFile
引发异常。这个方法在自己实现时似乎是可选的。@jornverne有趣!不幸的是,许多库(例如Guava)采用文件
而不是独立于文件系统的替代方案(例如stream)。在我看来,文件
类的Java设计仍然很奇怪……显然应该有一个构造函数来为不同的文件系统
创建文件。有趣的是,在Java 7中,默认值是使用本机方法public static native FileSystem getFileSystem()代码>