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_Copy - Fatal编程技术网

Java复制覆盖文件,读取时获取旧文件

Java复制覆盖文件,读取时获取旧文件,java,file,copy,Java,File,Copy,在单元测试中,我覆盖一个配置文件来测试如何处理错误的属性值。 我正在使用Apache Commons IO: org.apache.commons.io.FileUtils.copyFile(new File(configDir, "xyz.properties.badValue"), new File(configDir, "xyz.properties"), false) 调查文件系统时,我可以看到xyz.properties实际上被覆盖了-大小被更新,内容与xyz.properties.

在单元测试中,我覆盖一个配置文件来测试如何处理错误的属性值。 我正在使用Apache Commons IO:

org.apache.commons.io.FileUtils.copyFile(new File(configDir, "xyz.properties.badValue"), new File(configDir, "xyz.properties"), false)
调查文件系统时,我可以看到
xyz.properties
实际上被覆盖了-大小被更新,内容与
xyz.properties.badValue
的内容相同

当我完成测试用例,该测试用例通过代码将文件读入属性对象(使用
FileReader
对象),我得到原始
xyz.Properties
文件的属性,而不是新复制的版本

通过调试,我只需执行一步并调查文件,就可以排除写入文件系统的时间问题

复制步骤是否有文件句柄?如果是这样,我将如何再次发布它? 如果没有,有人知道为什么会发生这种情况以及如何解决吗


谢谢。

我知道这并不能直接回答您的问题,但我认为最好维护两个单独的文件,并安排代码在运行时配置/注入配置文件的名称。这样,您的测试就可以指定要使用哪个配置文件,而不是覆盖单个文件。

我知道这并不能直接回答您的问题,但我认为最好维护两个单独的文件,并安排代码在运行时配置/注入配置文件的名称。通过这种方式,您的测试可以指定要使用哪个配置文件,而不是覆盖单个文件。

如果您在该对象之前初始化了
FileReader
对象,那么它将已经存储了旧版本的临时副本

您需要重置它:

FileReader f = new FileReader("the.file");

// Copy and overwrite "the.file"

f = new FileReader("the.file");
在Unix文件系统模型中,只要有人在文件中有一个打开的
filehandle
,或者有一个指向它的目录条目,包含文件内容的
inode
就会一直存在

替换目录中的文件名不会删除
inode
(文件内容),因此可以继续使用已打开的
filehandle


这实际上可以用来创建不需要清理的临时文件:创建文件,然后立即取消链接,同时保持打开状态。当您关闭文件句柄时,
索引节点
将被捕获

如果您在该对象之前初始化了
文件读取器
对象,那么它将已经存储了旧版本的临时副本

您需要重置它:

FileReader f = new FileReader("the.file");

// Copy and overwrite "the.file"

f = new FileReader("the.file");
在Unix文件系统模型中,只要有人在文件中有一个打开的
filehandle
,或者有一个指向它的目录条目,包含文件内容的
inode
就会一直存在

替换目录中的文件名不会删除
inode
(文件内容),因此可以继续使用已打开的
filehandle


这实际上可以用来创建不需要清理的临时文件:创建文件,然后立即取消链接,同时保持打开状态。当您关闭文件句柄时,
inode
将被收获

复制方法将适当地关闭所有句柄;如果没有进一步的信息,可能很难提供帮助。您是否有一个能够重现错误的最小测试用例?copy方法适当地关闭所有句柄;如果没有进一步的信息,可能很难提供帮助。您是否有一个能够重现错误的最小测试用例?…因为在Unix文件系统模型中,只要有人在文件中有一个打开的文件句柄,或者有一个指向它的目录条目,包含文件内容的
inode
就会一直存在。替换目录中的文件名不会删除
inode
(文件内容),因此可以继续使用已打开的文件句柄。这实际上可以用来创建不需要清理的临时文件:创建文件,然后立即取消链接,同时保持打开状态。当您关闭文件句柄时,
inode
将被捕获……因为在Unix文件系统模型中,只要有人在文件中有一个打开的文件句柄,或者有一个指向它的目录条目,包含文件内容的
inode
就会一直存在。替换目录中的文件名不会删除
inode
(文件内容),因此可以继续使用已打开的文件句柄。这实际上可以用来创建不需要清理的临时文件:创建文件,然后立即取消链接,同时保持打开状态。当您关闭文件句柄时,
inode
将被捕获。