问题标签 [java.nio.file]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1380 浏览

java - java中的进程同步

进程 A 在执行时写入文件 XYZ。有进程 B 和 C,它们在执行时会读取文件 XYZ。因此,当进程 A 启动时,B 和 C 应该等待 A 完成。为了提供同步,我可以使用 java.nio 包吗?或者我应该使用 FileLock 或套接字之类的东西?我们可以提一下等待第二个进程等待的时间吗?

已编辑:文件是在第一次写入过程中创建的。在这种情况下,我可以将其设为共享资源吗?

0 投票
1 回答
1774 浏览

java - 如何使用 clojure 实例化 Path 对象

由于Path类没有公共构造函数,因此路径对象是使用对象中的get工厂方法创建的Paths

例如

我们如何以clojure方式做到这一点?

0 投票
3 回答
9361 浏览

java - 如何保证Java中文件的原子移动或异常?

在我的一个项目中,我对一个 JRE 中的一个文件具有并发写访问权限,并且希望通过首先写入一个临时文件然后使用原子移动将该临时文件移动到目标来处理这个问题。我不关心写访问的顺序之类的,我只需要保证单个文件在任何给定时间都是可用的。我已经知道 Files.move 等,我的问题是我查看了该方法的至少一个实现,它对实现是否真的保证原子移动提出了一些疑问。请看下面的代码:

Files.move on GrepCode for OpenJDK

问题是选项 ATOMIC_MOVE 并非在所有情况下都被考虑,但源和目标路径的位置是唯一重要的事情。这不是我想要的,也不是我理解文档的方式:

如果移动不能作为原子文件系统操作执行,则抛出 AtomicMoveNotSupportedException。例如,当目标位置位于不同的 FileStore 上并且需要复制文件时,或者目标位置与该对象的不同提供程序相关联时,就会出现这种情况。

上面的代码显然违反了该文档,因为它在根本不识别 ATOMIC_MOVE 的情况下退回到复制删除策略。在我的情况下,一个例外是完全可以的,因为我们服务的主机可以更改他的设置以仅使用一个支持原子移动的文件系统,因为这就是我们在系统要求中所期望的。我不想处理的事情只是因为实现使用了复制删除策略而静默失败,这可能会导致目标文件中的数据损坏。因此,据我了解,依靠 Files.move 进行原子操作根本不安全,因为如果不支持这些操作,它并不总是会失败,但实现可能会退回到复制删除策略。

这种行为是否是实现中的错误并需要归档,或者文档是否允许这种行为并且我理解错了?如果我现在已经知道在外面使用了这样的可能损坏的实现,这有什么不同吗?在这种情况下,我需要自己同步写访问权限......

0 投票
1 回答
778 浏览

java - 创建文件时如何设置 OTHERS_WRITE?

我正在尝试将createFile与派生自"rw-rw-rw-". 我的文件是"rw-rw-r--"在 Fedora 上创建的。

创建文件时如何设置 OTHERS_WRITE?

例子:

0 投票
0 回答
50 浏览

java - java.nio.file 从文件中组织文本

我以前从未真正使用过 java 中的文本文件,但现在我需要这样做,而且我有点卡住了。下面是我所拥有的。

这是输出的一部分

我正在尝试复制这个词,然后我将使用这些数字为这个词创建一个序列号。所以我需要能够阅读单词,然后是情绪,然后是与情绪匹配的数字。

我尝试使用 line.charAt(); 当我输入一个索引号时,我得到了一个错误。我认为给我带来麻烦的是我对流的了解不多。我似乎无法在 java 文档中找到满足我需要的特定方法,并且想知道是否有人可以帮助我。

如果它有帮助或有人感兴趣,我想根据歌曲的歌词、标签和流派将歌曲与某些情绪相匹配。所以我会处理很多文本文件。

0 投票
1 回答
444 浏览

java - Java AsynchronousFileChannel 和 ByteBuffer

我尝试使用 AsynchronousFileChannel 来实现复制文件。用于读写的 AsynchronousFileChannel 对象声明为

读取的 CompletionHandler 看起来像

然后我开始读取文件

问题是,读取完成后,如果我写文件(请参阅注释“问题行”以查看它的调用位置)

不会写出任何内容。我必须再次包装缓冲区

为了看到写出的内容

我的问题是,我必须使用 ByteBuffer 来包装另一个 ByteBuffer 的内容的原因是什么?

0 投票
2 回答
394 浏览

java.nio.file - 如何在java中将三个字节的数据压缩成两个字节

我必须将 3 个字节的数据压缩为两个字节。3 个字节的数据包括一天是一个字节,小时是另一个字节,最后分钟是一个字节。所以我总共有 3 个字节的数据。我怎么能把这个数据只翻转成两个字节。

谢谢,

0 投票
3 回答
678 浏览

java - 是否有一个(Java 7)文件系统,其 Path .isAbsolute() 但有一个空根?

javadoc.isAbsolute()说:

判断这条路径是否是绝对的。
绝对路径是完整的,因为它不需要与其他路径信息结合来定位文件。

返回: true当且仅当此路径是绝对路径

javadoc.getRoot()说:

将此路径的根组件作为 Path 对象返回,如果此路径没有根组件,则返回 null。

返回: 表示此路径的根组件的路径,或null

好的,所以,我在这里不知所措;是否有任何文件系统的路径可能是绝对的,根本没有根?


编辑:请注意,可能存在具有根但不是绝对的路径。例如,这些在 Windows 系统上:

  • C:foo;
  • \foo\bar.

但我在这里要求相反:没有根和绝对。

0 投票
1 回答
134 浏览

java - Path 的 .relativize() 文档中的错误,或者我在这里做错了什么?

好的,这里有一些有趣的东西。请注意,这里的“元素”是 的一个实例PathElements,并且对于这些.resolve().relativize()已经过全面测试并且已知可以工作......指向相关方法实现的链接Path.resolve()Path.relativize()

失败的测试方法的摘录:

此测试失败:

显然如此!

  • r = p.resolve(q) 将给出一个与 p 共享相同文件系统的路径,而不是 q;
  • 因此,p.relativize(r) 也会给出一个与 p 具有相同文件系统的 Path;
  • 但是 Path 合约要求为了使两条路径相等,它们共享同一个文件系统。

在这种情况下,这总是错误的。

那么,这是文档中的一个公然错误还是我忽略了什么?

0 投票
1 回答
1771 浏览

java - 当目标路径是目录时,Files.newInputStream() 无关紧要的行为?

注意:请运行下面的确切代码;没有对其进行修改,特别是不要使用File,因为此错误与新java.nio.fileAPI相关联

好吧,这不是真正的“需要回答的问题”,而是呼吁证人......

设想:

  • 在你的操作系统上有一个目录,不管它是什么,你知道你有访问权限——用 Unix 的说法,你至少有它的读取权限(这意味着你可以列出其中的条目);在下面的代码中,假设 代表的路径System.getProperty("java.io.tmpdir")符合要求;
  • 安装了Oracle JDK 或 OpenJDK,7+;以便您可以java.nio.file随意使用。

现在,下面的代码所做的非常简单:它尝试使用InputStreamFiles.newInputStream(). 代码(也可在此处获得;添加了我的评论):

好的,现在当您运行该代码时,以下 JRE/OS 组合会发生这种情况:

  • Linux x86_64,Oracle JDK 1.8.0_25:IOException (is a directory)FAIL_READ
  • Linux x86_64,Oracle JDK 1.7.0_72:IOException (is a directory)FAIL_READ
  • Mac OS X x86_64,Oracle JDK 1.8.0_25:IOException (is a directory)FAIL_READ
  • Windows 7,Oracle JDK 1.8.0_25:AccessDeniedExceptionFAIL_OPEN(!!)。

老实说,我不知道如何处理那段代码。正如我在介绍中所说,我在这里寻找证人。我肯定会向 OpenJDK 开一个关于这个的 bug,看起来很严重。我还邮寄了关于这个问题的 nio-dev 邮件列表。

好吧,至于我想问的一个问题:IsDirectoryExceptionJDK 中的 a (继承FileSystemException)呢?我实际上已经在我的一个项目中定义了它来解决这样的问题。我不确定为什么“Java 人”没有考虑到这个问题......