2017-04-04 3 views
4

Coldfusion \ Javaを使用してWindowsサーバーに複数のファイルを含むTARファイルを作成する必要があります。私はそれらを開梱するという例がたくさんありましたが、それらを作成することはほとんどありませんでした。 gzipを使用してファイルにテキストを追加して動作させるこの例が見つかりましたが、ファイルを追加する必要があります。私はgzipがtarballを構築するのと同じことを100%確信していません。このプロジェクトは、非常に短いターンアラウンドで私に割り当てられていたし、右方向に任意のヘルプは大歓迎ですので、私は私のホイールを回転させています: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や圧縮)が アーカイブを圧縮するために使用されます。

簡単なオプションは(tarとgzip形式をサポートしています)7-Zipをインストールし、適切な引数でcfexecuteからそれを呼び出すことです。 javaのオプションについて

<!--- 
    "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> 

、TARファイルを作成するためのApache Commonsのライブラリを使用して言及this thread: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

NB:をあなたは大きなファイルをアーカイブする場合バッファリングを調べる。基本的な考え方については、Code Sample 3: Zip.javaを参照してください。それがZipファイル用であるという事実を無視してください。基本的な考え方は同じですが、クラスだけが異なります。

+0

それがうまくいった!私はjTarを試していましたが、運があまりなく、これを試そうとしていました。私はTARファイルを7-zipで開くときに厄介なエラーが発生しています: – RobE

+0

エラーは「アーカイブの終了後にデータがあります」です。私はそれが何であるか分かりません。 – RobE

+0

どの例を使用しますか?私の(簡単な)テストでは、どちらも私のために7zipで間違って開かれました。 – Leigh

関連する問題