簡體   English   中英

如何有效確定文件種類?

[英]How to determine file kind effectively?

我正在研究的程序會查看各種ASCII文本文件並進行一些處理。 為了知道如何處理事情,需要知道是否文件

- IS_EMPTY         // done
- IS_JSON          // done via parsing, using gson
- IS_XML           // done via parsing, using dom4j
- IS_PROPERTIES    
- IS_SCRIPT

我想知道是否有一種有效的方法來確定文件是否具有類型屬性,而無需閱讀每一行來查看它是否包含Key=Value對?

另外,有沒有一種有效的方法來確定文件是否為Shell腳本?

是否有解析器可用於檢查此內容?

您可以嘗試以下整潔的庫: WazFormat

如果您的程序要求輸入文件的格式正確而不是混合類型,那么我建議您將JSON和XML impls替換為以下內容:

  1. JSON-只需查找開頭的'{'作為文件中的第一個字符即可; 這是任何其他文件的無效格式(可能是腳本,具體取決於您的格式)。 如果找到“ {”作為第一個字符,則為JSON。 這樣可以節省使用GSON處理整個文件的時間。

  2. XML-查找文件頭; 格式正確的XML文件甚至在此標頭之前都不能有空格; 它必須立即出現。 同樣,沒有理由嘗試捕獲整個事件只是為了捕獲異常。

  3. 屬性-同樣,我將檢查第一行並確保其具有= \\ n格式。 如果他們這樣做,那你很好。

  4. 腳本-我不確定您的腳本語言的格式,但是您明白了。

總而言之,進行廉價/快速檢查是否明確定義了您的要求是解決問題的方法。 如果您需要一個JSON文件全部為JSON,並且在讀取文件時遇到的第一個字符為'{',那么我會說這是一個JSON文件,而不是EMPTY,XML或PROPERTIES(同樣,不包括SCRIPT,因為我沒有知道格式)。

然后,您可以倒回輸入流並將其提供給解析庫以進行讀取(在這里PushbackInputStreams可以派上用場)

用於解析屬性文件的Properties#load 它與讀取每一行以確認其是否適合語法沒有什么不同(除了Key=Value之外,還有一點點)。 如果格式無效,則引發異常。

Shell腳本? 不要以為它們可能是任何語言或針對不同的Shell,都認為不可能。 我只要檢查一下shebang的第一行。

對於shell腳本:僅在Shebang之后檢查是否指定了shell是不夠的,例如

!/ bin / bash是shell

!/ bin / sh是外殼

!/ usr / bin / ruby​​不是shell

!/ usr / bin / perl不是shell

否則舍入為腳本語言。

與XML相同,它應具有doctype行,例如

<?xml version="1.0" standalone="yes" ?>

該博客文章包含指向一些用於識別文件類型的庫的鏈接: http : //stanlearnslinux.blogspot.com/2011/08/libmagic-like-java-packages.html

jmimemagic看起來像它會做您想要的(包括shell腳本): http : //sourceforge.net/projects/jmimemagic/

暫無
暫無

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

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