问题标签 [nio2]

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 投票
4 回答
2937 浏览

java - 在 Java 6 中使用 Java 7 SDK 功能

如果可用,我有兴趣使用 Java 7 SDK 中的一些 NIO2 功能(特别是文件系统观察程序),但是我不想为 Java 7 编译我的类并排除 Java 6 运行时。主要是因为我想保持与 Mac OS X 的兼容性,也因为我不想强迫我的用户升级。

这可能吗?最好的方法是什么?任何链接或示例?

以下是我可以想象的一些方法:使用不同的编译器编译类文件并根据 Java 版本动态加载它?或者也许使用反射?或者也许只是 Java 7 的编译器设置来生成与 Java 6 兼容的类?

我正在寻找一种不会变成丑陋的混乱的解决方案:),因此理想情况下,我可以编写一个接口的两种实现,一种使用新功能,一种不使用,然后动态选择一个,而不必进行反射调用到处都是。

0 投票
2 回答
4018 浏览

java - Java I/O:确保文件在任何 r/w 操作之前没有被另一个进程锁定

我在基于 Java 7 WatchService API 跟踪目录中文件内容的应用程序中遇到了一个反复出现的问题。当底层文件系统对文件触发修改事件时,我想立即计算其 SHA-256。

但是经常发生另一个进程打开了文件(即 Word),从而保留了排他锁并阻止我的应用程序进行任何读/写操作。如果针对打开的文件创建了任何流/通道,则会抛出用于 nio API 的 FileNotFoundException 或 FileSystemException,并带有如下消息:

该进程无法访问该文件,因为它正被另一个进程使用

当文件实际上不存在于 fs 上时,我无法提供一种解决方案来检测此类情况,而不会掩盖“真实”的 FileNotFoundException。

我想出了通过 File.exists 检查存在性的想法,然后如果在打开流时抛出 FileNotFoundException,我将能够推断出文件已被锁定。我对这方面的任何意见持开放态度!

谢谢!

0 投票
1 回答
270 浏览

java - HTML5:API 中是否有文件更改通知?

我看了一下HTML5 File API。我还查看了使用 HTML5 处理文件的本教程

是否有用于文件更改通知的 API?我希望有类似于Java NIO2 库中的 WatchService API的东西。

0 投票
1 回答
711 浏览

java - nio2类的Watch Service API的问题

我正在使用 nio.2 类的 Watch Service API 来监视我的项目中的特定目录(OS 平台 Ubuntu 11.10)。每当进行更改时,例如,如果将名为 abc.json 的新文件添加到监视目录,它首先会触发 CREATED 事件,然后立即触发 MODIFIED 事件。我知道这是因为操作系统首先创建了一个 0 字节文件然后对其进行了修改。应该在http://java.dzone.com/news/how-watch-file-system-changes给出的代码中进行哪些更改,以便只触发 CREATE 事件而不是 MODIFIED 事件。

其次,当触发 MODIFY 事件时, event.context().toString(); 方法给出类似.goutputstream-N2Z89V的输出,而不是由 CREATED 或 DELETED 事件给出的文件名。如何获取修改后的文件名?

0 投票
1 回答
870 浏览

java - AsynchronousFileChannel 是否有与 transferTo 等价的方法?

我一直在玩 Java 7 中的 NIO2,我有点假设它AsynchronousFileChannel会有一个transferTo像它的同步FileChannel兄弟一样的方法。

我正在寻找在本地文件和打开的 TCP 套接字之间执行零拷贝传输。我尝试简单地创建 aFileChanneltransferTo使用 myAsynchronousSocketChannel作为最后一个参数进行调用,但看到异步套接字版本不是 a WritableByteChannel,Java 不会拥有它。

排除这个选项后,是否有人知道一种解决方法或外部库,可以让我将字节传输到AsynchronousSocketChannel利用 DMA(并且暗示在用户空间中不使用缓冲区)?

0 投票
1 回答
547 浏览

java - 如何使用小端格式的 SeekableByteChannel 读写整数?

我需要用小端格式的 SeekableByteChannel 读写有符号和无符号整数。这可能看起来很愚蠢,但我在 JDK 中找不到任何东西。我是否错过了什么,或者我应该自己推出这个?这没问题,但我今天不想重新发明轮子。:-)

0 投票
1 回答
349 浏览

java - NIO2 n00b,FileVisitor/BufferedWriter

我正在自学 NIO2 并做一些实践来测试理论。目前我已经实现了 FileVisitor,它可以编译和运行,并在 fileVisit 中执行我期望的操作,但在 postFileVisit 中没有。也就是说,它会计算 .xml 和 .xhtml 文件中的表格行数,并使用结果创建一个文本文件,但它不会附加给定目录的表格行总数。然而,postFileVisit 确实做了一些事情,如果一个目录没有 .xml 或 .xhtml 文件,仍然会创建一个日志文件并加盖时间戳,但代码行 97 到 101 似乎没有效果。所以,我相信这是我搞砸的 BufferedWriter 的问题。谢谢您的帮助:

0 投票
1 回答
1274 浏览

java - 如何知道 FileVisitor 何时访问最后一个文件?

我需要对目录中最后访问的文件做一些事情。我如何知道当前对我的呼叫visitFile()是否是最后一个呼叫?

(我只想列出给定目录中的所有文件和目录。为此,我在我的实现中引入了一个depth字段,如果深度大于 0 ,我将返回。(然后增加.)问题是我不知道何时将 重置为 0,因为当我使用此 FileVisitor 实现为另一个目录调用 时,已经 > 0 并且它只列出给定目录。)FileVisitorpreVisitDirectorySKIP_SUBTREEdepthdepthwalkFileTreedepth

0 投票
4 回答
6964 浏览

java - 查找 FileStore 的目录

我正在尝试找到一种方法来检测闪存驱动器何时插入我的计算机。到目前为止,我找到的解决方案是轮询FileSystem#getFileStores更改。这确实告诉我闪存驱动器何时插入,但据我所知,没有办法检索它的位置。FileStore#type并且FileStore#name两者似乎都非常不可靠,因为它们的返回值是特定于实现的,但它们似乎是唯一可能返回任何相关信息的方法,这些信息可能有助于找到FileStore.

考虑到这一点,下面的代码:

给了我这个输出:

事实证明,FileStore#type返回驱动器的格式并FileStore#name返回驱动器的设备文件的位置。据我所知,唯一具有驱动器位置的方法就是toString方法,但是从中提取路径名似乎很危险,因为我不确定该特定解决方案在其他操作系统上的支持程度如何,并且Java 的未来版本。

有什么我在这里遗漏的,还是纯粹用 Java 根本不可能?

系统信息:

0 投票
1 回答
1929 浏览

java - 如何使用 Java NIO 2 访问 jar-archive 中的 zip 文件

我想访问一个位于 jar 存档内的 zip 文件。我认为我应该可以使用 NIO 2 的功能,但它似乎对我不起作用。有人知道如何以及是否可能吗?

我已经读到在 NIO 2 之前不先提取 zip 文件是不可能的,而且我还读到 TrueZIP 库提供了这个功能。但我想用 Java 的“本机”能力来解决这个问题。

最好的祝福,

大卫