如何建立原子文件写入操作?该文件将由Java服务编写,并由python脚本读取。
对于记录,读取远大于写入。但是写操作是成批发生的,而且往往很长。文件大小为兆字节。
现在,我的方法是:
同一目录
这是正确的方法吗?如何避免出现删除旧文件而新文件名尚未重命名的情况?
这些编程语言(python和java)是否提供锁定结构并避免这种情况的构造?
参考方案
AFAIK号
原因是要使这种原子操作成为可能,必须以事务性文件系统的形式提供OS支持。主流操作系统都没有提供事务性文件系统。
编辑-至少对于兼容POSIX的系统我是错的。如果目标名称已经存在,则POSIX rename
系统调用将执行原子替换……如@janneb所指出。这应该足以自动执行OP的操作。
但是,事实仍然是,Java File.renameTo()
方法没有明确保证是原子的,因此它不能为OP问题提供跨平台的解决方案。
编辑2 -使用Java 7,您可以将java.nio.file.Files.move(Path source, Path target, CopyOption... options)
与copyOptions和ATOMIC_MOVE
结合使用。如果(操作系统/文件系统)不支持此功能,则应获取异常。
我的项目设定我有以下项目设置:\program.jar \images\logo.png 在我的代码中,我使用相对URL "images/logo.png"引用图像。问题如果我在目录中使用以下命令运行此程序:c:\projects\program_dir\bin\>java -jar program.jar 然后一切正常,Java能…
Java Scanner读取文件的奇怪行为 - java因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…
Java:正则表达式模式匹配器是否有大小限制? - java我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)
Java:找到特定字符并获取子字符串 - java我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…
Java:线程池如何将线程映射到可运行对象 - java试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …