簡體   English   中英

使用Java NIO監視服務監視HTTP資源

[英]Monitor a http resource using Java NIO watch service

我需要監視Amazon S3上的目錄以檢查是否有任何新文件添加到該目錄。 我嘗試使用Java NIO監視服務,但是無法正常工作。 如果我對提供的S3路徑使用以下語法:

String pathToMonitor="file://https://abc/dir";  //Line1
Path path=Paths.get(new URL(pathToMonitor).toURI()); //Line2
Boolean isFolder=(Boolean) Files.getAttribute(file, "basic:isDirectory", LinkOption.NOFOLLOW_LINKS); //Line3

然后我得到以下錯誤:

java.nio.file.FileSystemException: \\https\abc\dir: The network path was not found.

at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:53)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38)
at sun.nio.fs.AbstractBasicFileAttributeView.readAttributes(AbstractBasicFileAttributeView.java:168)
at sun.nio.fs.AbstractFileSystemProvider.readAttributes(AbstractFileSystemProvider.java:92)
at java.nio.file.Files.readAttributes(Files.java:1961)
at java.nio.file.Files.getAttribute(Files.java:1866)

如果我從路徑中刪除file://前綴,則會生成以下錯誤:

Exception in thread "main" java.nio.file.FileSystemNotFoundException: Provider "https" not installed
at java.nio.file.Paths.get(Paths.java:147)

如果我將“ Line2”修改為Path path=Paths.get("https://abc/dir"); 然后生成以下跟蹤:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <:> at index 5: https://abc/dir
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
at java.nio.file.Paths.get(Paths.java:84)

請讓我知道我在這里做錯了什么,是否可以使用Java監視服務監視像這樣的Web資源,或者是否還有其他框架/ api。

謝謝

您已經為它提供了file協議和http協議的混合,這實際上沒有任何意義。

基本上,如果您只能通過HTTP訪問資源,則您將無法做您想做的事情。 沒有通用的機制可以在HTTP資源發生更改時得到通知,因為沒有通用的機制可以從HTTP資源獲得推送通知,並且它不在操作系統的控制范圍之內,因此它無法在更改發生時進行攔截。 使用本地文件,您的操作系統可以實時檢測到更改,因為它最終負責處理對本地磁盤的寫操作,但這不適用於您的情況。

您將需要輪詢變更的內容,除非S3有定制的變更推送通知(但這是您必須單獨調查的內容)。 Java NIO無法做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM