2017-04-04 74 views
4

我需要使用Coldfusion \ Java在Windows服務器上創建一個包含多個文件的TAR文件。我發現了很多拆包的例子,但創建它們卻很少。我發現這個使用gzip向文件添加一些文本的例子,它可以工作,但我需要添加文件。我也不是100%肯定gzip和構建tarball是一樣的。該項目分配給我用很短的週轉和我紡紗我的車輪,從而在正確的方向上沒有任何幫助是極大的讚賞:在Windows服務器上使用Coldfusion Java創建一個TAR文件(tarball)

贏Server 2012中, 的ColdFusion 10, Java版本1.7.0_15

<cfset lineBreak = chr(13) & chr(10) /> 
<!--- open the sitemap file ---> 
<cfset tarFilePath = "#application.imageingFolder#DTSimages\Pending\tiff.gz" /> 
#tarFilePath# 
<!--- create streams ---> 
<cfset outputStream = CreateObject("java", "java.io.FileOutputStream").Init(
      CreateObject("java","java.io.File").Init(tarFilePath)) /> 
<cfset gzipStream = CreateObject("java", "java.util.zip.GZIPOutputStream").Init(outputStream) /> 
<cfsavecontent variable="siteMapHeader"><?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
    xmlns:image="http://www.sitemaps.org/schemas/sitemap-image/1.1" 
    xmlns:video="http://www.sitemaps.org/schemas/sitemap-video/1.1"> 
</cfsavecontent> 
<cfset siteMapFooter = "</urlset>" /> 
<cfset gzipStream.write(ToString(siteMapHeader).GetBytes()) /> 

<cfset gzipStream.close() /> 
<cfset outputStream.close() /> 

回答

2

雖然often used together,tar和gzip是不同的東西。從ZIP vs. GZIP

... tar命令用來創建一個檔案(不 壓縮)和其他程序(的gzip或壓縮)用於壓縮 存檔。

一個簡單的選擇是安裝7-Zip(支持焦油和gzip)中,用適當的參數從cfexecute調用它。要創建一個TAR文件(未壓縮):

<!--- 
    "a" - add files to archive 
    "t" - Type of archive 
    output .tar file 
    space separated list of files to add 
---> 
<cfexecute name="c:\Program Files\7-Zip\7z.exe" 
    arguments=" a -ttar c:\path\myarchive.tar c:\path\file1.xlsx c:\temp\otherfile.txt" 
    variable="output" 
    errorVariable="error" 
    timeout="60" /> 

<cfoutput> 
    output = #output#<br> 
    error = #error#<br> 
</cfoutput> 

對於Java選項,this thread提到使用Apache共享庫,用於創建TAR文件。這也恰好與CF捆綁所以它應該工作開箱:

http://www.oracle.com/technetwork/articles/java/compress-1565076.html

<cfscript> 
    // Initialize TAR file to generate 
    outputPath = "c:/temp/outputFile3.tar"; 
    os = createObject("java", "java.io.FileOutputStream").init(outputPath); 
    tar = createObject("java", "org.apache.commons.compress.archivers.tar.TarArchiveOutputStream").init(os); 

    // Add an entry from a string 
    someTextContent = '<?xml version="1.0" encoding="UTF-8"?>....'; 
    binaryContent = charsetDecode(someTextContent, "utf-8"); 
    entry = createObject("java", "org.apache.commons.compress.archivers.tar.TarArchiveEntry").init("siteHeader.xml"); 
    entry.setSize(arrayLen(binaryContent)); 
    tar.putArchiveEntry(entry); 
    tar.write(binaryContent); 
    tar.closeArchiveEntry(); 

    // Create an entry from a file 
    inputFile = createObject("java", "java.io.File").init("c:/path/someImage.jpg"); 
    entry = tar.createArchiveEntry(inputFile, "myImage.jpg"); 
    tar.putArchiveEntry(entry); 
    tar.write(FileReadBinary(inputFile)); 
    tar.closeArchiveEntry(); 

    // Close TAR file 
    tar.flush(); 
    tar.close(); 
</cfscript> 

詳情請參見文檔:Apache Commons - The TAR package

注意:如果你正在歸檔大文件,研究緩衝。有關基本概念,請參閱Code Sample 3: Zip.java。忽略它是用於Zip文件的事實。基本概念是一樣的,只有不同的類。

+0

工作正常!我一直在嘗試jTar,但沒有太多的運氣,正準備嘗試這個。當我用7-zip打開TAR文件時出現一個奇怪的錯誤: – RobE

+0

錯誤是「存檔結束後有數據」。我不確定那是什麼。 – RobE

+0

使用哪個例子?在我的(簡短)測試中,對於我來說,在7zip中都沒有錯誤地打開。 – Leigh

相關問題