Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中与文件系统无关的文件和路径?_Java_File_Unit Testing - Fatal编程技术网

Java中与文件系统无关的文件和路径?

Java中与文件系统无关的文件和路径?,java,file,unit-testing,Java,File,Unit Testing,我正在使用Java8编写一个与文件系统交互的应用程序。为了使测试更容易,我在我的方法中注入了一个文件系统,它可以被替换出来进行测试。我目前在单元测试中使用jimfs,在生产中使用DefaultFileSystem.getFileSystem() 我希望我的代码是平台独立的,并且在单元测试和生产之间是可移植的,但是,我认为标准库中的类可能会阻止这一点 例如,java.io.File包含以下内容: private static final FileSystem fs = DefaultFileSys

我正在使用Java8编写一个与文件系统交互的应用程序。为了使测试更容易,我在我的方法中注入了一个
文件系统
,它可以被替换出来进行测试。我目前在单元测试中使用
jimfs
,在生产中使用
DefaultFileSystem.getFileSystem()

我希望我的代码是平台独立的,并且在单元测试和生产之间是可移植的,但是,我认为标准库中的类可能会阻止这一点

例如,
java.io.File
包含以下内容:

private static final FileSystem fs = DefaultFileSystem.getFileSystem();
似乎
File
总是引用真实的文件,这对于我的单元测试来说是个问题

另一方面,
Path
只是一个接口,它应该使事情变得简单,只是它有一个创建
文件的方法

File toFile();
  • 哪些Java类与真正的文件系统相关联
  • 我写
    文件系统
    可移植代码的选项是什么
绑定到实际文件系统的java类是jre提供的Path的实现,并且与环境相关。
file
似乎总是指向
WinNTFileSystem
,这看起来真的很奇怪吗?这在Java 8中似乎已发生更改。
Path
s声明当路径未绑定到默认提供程序时,
toFile
引发异常。这个方法在自己实现时似乎是可选的。@jornverne有趣!不幸的是,许多库(例如Guava)采用
文件
而不是独立于文件系统的替代方案(例如stream)。在我看来,
文件
类的Java设计仍然很奇怪……显然应该有一个构造函数来为不同的
文件系统
创建文件。有趣的是,在Java 7中,默认值是使用本机方法
public static native FileSystem getFileSystem()