簡體   English   中英

有沒有辦法驗證一個文件是否是Java中的特殊塊文件?

[英]Is there a way to verify if a file is a special block file in Java?

我有一個特殊的用例,我需要驗證一個文件是否是一個特殊的塊文件(僅當我的 java 程序在 Linux 上運行時)。 我的代碼已經可以檢測到它是否在 Windows 或 Linux 上運行,所以如果它是 windows,我只會使驗證無效。

對於 Linux,我正在閱讀不同的FileAttributeView接口; 並且彈出的第一件事是使用PosixFileAttributeView (因為塊和字符設備文件是特定於 Linux 的),但是在進一步查看其 Javadoc 之后,它只提供對不同 RWX 的訪問權限(相對於所有者、組和其他人),但與特殊塊文件或其他文件屬性無關。 另一方面,所有文件系統都支持BasicFileAttributeView並且有一個名為isOther()的實例方法,這可以工作,但必須有其他更具體的方法,而不僅僅是知道文件不是常規文件、目錄或符號鏈接。 知道這something other太模糊了。任何幫助都深表感謝。

哇,這實際上比我想象的要難!

為了在 Linux 中實現這一點,您正在尋找的是來自stat()系統調用(在 C 世界中)的st_mode字段。 它的不同值表示文件是字符設備、塊設備、目錄等... ls -la返回的每一行的第一個字符表示該字段: b表示塊設備, d表示目錄, -表示常規文件,等等。 例如,如果你運行ls -la /dev/sda你可能會得到類似brw-rw---- 1...東西,因為sda是一個塊設備。 ls -la /opt的第一行將是dr-xr-xrx...因為opt是一個目錄。

https://linux.die.net/man/2/stat ,供參考)

瀏覽 Javadocs,我沒有找到允許直接訪問此st_mode字段的文件 class 。 就像您提到的那樣,有一些方法可以確定文件是目錄、文件還是其他文件,但這不足以區分所有選項並確定它是否是塊設備。

我確實找到了這個項目,它看起來可以讓你在 Java 中找到那個stat()結構。 這是相當多的開銷。 也許您可以提取此應用程序所需的位,但這可能並非易事。 您需要調用的具體方法是isBlockDev()

希望對您有所幫助,很想知道您是否解決了問題,或者是否有更好的答案!

暫無
暫無

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

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