好吧,這已被問很久以前,也沒有迴應這個問題。我沒有使用OPCPackage,因此我的答案不是基於此。
DOCX(以及PPTX和XSLX)文件都是具有特定結構的zip文件。 我們可以因此使用java.util.zip包,並列舉zip文件的條目並獲得ZIP條目XL爲XLSX文件和docx文件字的大小。可能是一個更通用的方法是忽略以下頂層拉鍊條目,即拉鍊開頭的條目:
- docProps
- _rels
- [CONTENT_TYPES] .XML
的大小其餘的zip條目(不要忽略此zip條目中的任何文件夾)會告訴你正確的內容大小。 此方法也非常高效 - 您只能讀取zip文件的條目而不讀取zip文件,因此獲取大小信息的時間和內存資源可以忽略不計。爲了快速入門,我能夠在幾分之一秒內獲得4MB docx文件的大小。
下面粘貼了一個「足夠好」但沒有充分工作的代碼片段。請隨意將此作爲起點,並修復發現的錯誤。如果你可以發回修改或更正以便其他人能夠獲益,那將是非常好的
private static final void printUnzippedContentLength() throws IOException
{
ZipFile zf = new ZipFile(new File("/home/chaitra/verybigfile.docx"));
Enumeration<? extends ZipEntry> entries = zf.entries();
long sumBytes = 0L;
while(entries.hasMoreElements())
{
ZipEntry ze = entries.nextElement();
if(ze.getName().startsWith("docProps") || ze.getName().startsWith("_rels") || ze.getName().startsWith("[Content_Types].xml"))
{
continue;
}
sumBytes += ze.getSize();
}
System.out.println("Uncompressed content has size " + (sumBytes/1024) + " KB");
}
那麼包中每個部分的長度總和是多少?在XML部分的情況下,您是否想要包含元素名稱的長度(例如w:p),還是僅包含文本節點的內容?請注意,XML文檔的長度可能會有所不同,具體取決於使用的命名空間前綴,名稱空間的聲明位置等。另外在Open XML中,屬性值可能爲true,1或on。 – JasonPlutext
@JasonPlutext我想單獨找到文本內容的大小。 – Cool
使用POI來提取文本,然後調用'textString.length()'? – Gagravarr