问题标签 [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.
java - 在 Java 6 中使用 Java 7 SDK 功能
如果可用,我有兴趣使用 Java 7 SDK 中的一些 NIO2 功能(特别是文件系统观察程序),但是我不想为 Java 7 编译我的类并排除 Java 6 运行时。主要是因为我想保持与 Mac OS X 的兼容性,也因为我不想强迫我的用户升级。
这可能吗?最好的方法是什么?任何链接或示例?
以下是我可以想象的一些方法:使用不同的编译器编译类文件并根据 Java 版本动态加载它?或者也许使用反射?或者也许只是 Java 7 的编译器设置来生成与 Java 6 兼容的类?
我正在寻找一种不会变成丑陋的混乱的解决方案:),因此理想情况下,我可以编写一个接口的两种实现,一种使用新功能,一种不使用,然后动态选择一个,而不必进行反射调用到处都是。
java - Java I/O:确保文件在任何 r/w 操作之前没有被另一个进程锁定
我在基于 Java 7 WatchService API 跟踪目录中文件内容的应用程序中遇到了一个反复出现的问题。当底层文件系统对文件触发修改事件时,我想立即计算其 SHA-256。
但是经常发生另一个进程打开了文件(即 Word),从而保留了排他锁并阻止我的应用程序进行任何读/写操作。如果针对打开的文件创建了任何流/通道,则会抛出用于 nio API 的 FileNotFoundException 或 FileSystemException,并带有如下消息:
该进程无法访问该文件,因为它正被另一个进程使用
当文件实际上不存在于 fs 上时,我无法提供一种解决方案来检测此类情况,而不会掩盖“真实”的 FileNotFoundException。
我想出了通过 File.exists 检查存在性的想法,然后如果在打开流时抛出 FileNotFoundException,我将能够推断出文件已被锁定。我对这方面的任何意见持开放态度!
谢谢!
java - HTML5:API 中是否有文件更改通知?
我看了一下HTML5 File API。我还查看了使用 HTML5 处理文件的本教程。
是否有用于文件更改通知的 API?我希望有类似于Java NIO2 库中的 WatchService API的东西。
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 事件给出的文件名。如何获取修改后的文件名?
java - AsynchronousFileChannel 是否有与 transferTo 等价的方法?
我一直在玩 Java 7 中的 NIO2,我有点假设它AsynchronousFileChannel
会有一个transferTo
像它的同步FileChannel
兄弟一样的方法。
我正在寻找在本地文件和打开的 TCP 套接字之间执行零拷贝传输。我尝试简单地创建 aFileChannel
并transferTo
使用 myAsynchronousSocketChannel
作为最后一个参数进行调用,但看到异步套接字版本不是 a WritableByteChannel
,Java 不会拥有它。
排除这个选项后,是否有人知道一种解决方法或外部库,可以让我将字节传输到AsynchronousSocketChannel
利用 DMA(并且暗示在用户空间中不使用缓冲区)?
java - 如何使用小端格式的 SeekableByteChannel 读写整数?
我需要用小端格式的 SeekableByteChannel 读写有符号和无符号整数。这可能看起来很愚蠢,但我在 JDK 中找不到任何东西。我是否错过了什么,或者我应该自己推出这个?这没问题,但我今天不想重新发明轮子。:-)
java - NIO2 n00b,FileVisitor/BufferedWriter
我正在自学 NIO2 并做一些实践来测试理论。目前我已经实现了 FileVisitor,它可以编译和运行,并在 fileVisit 中执行我期望的操作,但在 postFileVisit 中没有。也就是说,它会计算 .xml 和 .xhtml 文件中的表格行数,并使用结果创建一个文本文件,但它不会附加给定目录的表格行总数。然而,postFileVisit 确实做了一些事情,如果一个目录没有 .xml 或 .xhtml 文件,仍然会创建一个日志文件并加盖时间戳,但代码行 97 到 101 似乎没有效果。所以,我相信这是我搞砸的 BufferedWriter 的问题。谢谢您的帮助:
java - 如何知道 FileVisitor 何时访问最后一个文件?
我需要对目录中最后访问的文件做一些事情。我如何知道当前对我的呼叫visitFile()
是否是最后一个呼叫?
(我只想列出给定目录中的所有文件和目录。为此,我在我的实现中引入了一个depth
字段,如果深度大于 0 ,我将返回。(然后增加.)问题是我不知道何时将 重置为 0,因为当我使用此 FileVisitor 实现为另一个目录调用 时,已经 > 0 并且它只列出给定目录。)FileVisitor
preVisitDirectory
SKIP_SUBTREE
depth
depth
walkFileTree
depth
java - 查找 FileStore 的目录
我正在尝试找到一种方法来检测闪存驱动器何时插入我的计算机。到目前为止,我找到的解决方案是轮询FileSystem#getFileStores
更改。这确实告诉我闪存驱动器何时插入,但据我所知,没有办法检索它的位置。FileStore#type
并且FileStore#name
两者似乎都非常不可靠,因为它们的返回值是特定于实现的,但它们似乎是唯一可能返回任何相关信息的方法,这些信息可能有助于找到FileStore
.
考虑到这一点,下面的代码:
给了我这个输出:
事实证明,FileStore#type
返回驱动器的格式并FileStore#name
返回驱动器的设备文件的位置。据我所知,唯一具有驱动器位置的方法就是toString
方法,但是从中提取路径名似乎很危险,因为我不确定该特定解决方案在其他操作系统上的支持程度如何,并且Java 的未来版本。
有什么我在这里遗漏的,还是纯粹用 Java 根本不可能?
系统信息:
java - 如何使用 Java NIO 2 访问 jar-archive 中的 zip 文件
我想访问一个位于 jar 存档内的 zip 文件。我认为我应该可以使用 NIO 2 的功能,但它似乎对我不起作用。有人知道如何以及是否可能吗?
我已经读到在 NIO 2 之前不先提取 zip 文件是不可能的,而且我还读到 TrueZIP 库提供了这个功能。但我想用 Java 的“本机”能力来解决这个问题。
最好的祝福,
大卫