2010-08-04 45 views
2

我目前正在重構Java內部使用的庫。優雅地處理多個文件輸入機制

庫接收XML文檔,並返回結果的數據結構。 鑑於:

  • 有兩個客戶爲這個圖書館,有一個XML文檔作爲一個InputStream和其他有一個字符串的文件路徑。
  • 客戶端使用圍繞通過在磁帶庫中進行實際處理

前級是什麼用於處理文件的最佳架構?

目前,它是按以下方式處理(不相關的細節被省略,類的名稱更改):

public class ILuvUsers { 

public Result getResult(String path) { 
    return getResult(ElementsLoader.loadIntermediateType(path)); 
} 

public Result getResult(InputStream stream) { 
    return getResult(ElementsLoader.loadIntermediateType(stream)); 
} 

private Result getResult(IntermediateType itype) { 
    //... do stuff and return Result 
} 
} 

public class ElementsLoader { 
public static IntermediateType loadIntermediateType(final InputStream is) { 
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); 
    return doSomethingWithDocument(doc); 
} 

public static IntermediateType loadIntermediateType(final String path) { 
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(path); 
    return doSomethingWithDocument(doc); 
} 
} 

我需要在每個類的InputStream創建重載的方式和字符串似乎是一個代碼聞到我。 如果第二天我需要支持使用「文件」類型,該怎麼辦? 最好我想以某種方式automagically支持DocumentBuilder的解析方法的每個重載。

由於這是不是真的有可能在Java中,這一切似乎是一個普通不過的情況下,是什麼這個問題的最佳做法?你見過任何好的解決方案嗎?

回答

2

這並不是那麼糟糕。域名有限,不能快速增長。

但是,你發現,你需要找到一個「最小公分母」爲輸入的問題。

這通常是某種InputStream

鑑於String,您想要打開Stream並使用Stream加載程序。

給出一個Stream,你是金色的。

鑑於File,您需要打開Stream並使用Stream加載程序。

這應該涵蓋幾乎所有可能的基地,因爲據我所知,你可以做一個InputStream出幾乎任何東西的。

+0

最後我做了你的建議,只使用InputStream。 如果用戶想要使用路徑/文件,那麼他可以使用FileInputStream。 – maayank 2010-08-05 14:01:35