[英]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替換為以下內容:
JSON-只需查找開頭的'{'作為文件中的第一個字符即可; 這是任何其他文件的無效格式(可能是腳本,具體取決於您的格式)。 如果找到“ {”作為第一個字符,則為JSON。 這樣可以節省使用GSON處理整個文件的時間。
XML-查找文件頭; 格式正確的XML文件甚至在此標頭之前都不能有空格; 它必須立即出現。 同樣,沒有理由嘗試捕獲整個事件只是為了捕獲異常。
屬性-同樣,我將檢查第一行並確保其具有= \\ n格式。 如果他們這樣做,那你很好。
腳本-我不確定您的腳本語言的格式,但是您明白了。
總而言之,進行廉價/快速檢查是否明確定義了您的要求是解決問題的方法。 如果您需要一個JSON文件全部為JSON,並且在讀取文件時遇到的第一個字符為'{',那么我會說這是一個JSON文件,而不是EMPTY,XML或PROPERTIES(同樣,不包括SCRIPT,因為我沒有知道格式)。
然后,您可以倒回輸入流並將其提供給解析庫以進行讀取(在這里PushbackInputStreams可以派上用場)
用於解析屬性文件的Properties#load
。 它與讀取每一行以確認其是否適合語法沒有什么不同(除了Key=Value
之外,還有一點點)。 如果格式無效,則引發異常。
Shell腳本? 不要以為它們可能是任何語言或針對不同的Shell,都認為不可能。 我只要檢查一下shebang的第一行。
對於shell腳本:僅在Shebang之后檢查是否指定了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.