如何用Java下载WordPress

时间:2015-07-23 16:57:44

标签: java wordpress apache-commons apache-commons-compress

我想用Java下载WordPress

我的代码如下所示:

public void file(String surl, String pathToSave) throws IOException {
    URL url = new URL(surl);
    sun.net.www.protocol.http.HttpURLConnection con = (HttpURLConnection) url.openConnection();
    try (InputStream stream = con.getInputStream()) {
        Files.copy(stream, Paths.get(pathToSave));
    }
}

我正在使用此网址下载最新版本的WordPress:http://wordpress.org/latest.tar.gz

但是当我尝试解压缩tar.gz文件时,我收到一条错误消息,指出该文件不是gzip格式。

我读了这个Issues uncompressing a tar.gz file,看起来当我下载WordPress时,我需要启用一个cookie来接受条款和服务。

我该怎么做?

或者我是否错误地下载了tar.gz文件?

这是我的tar.gz解压缩代码:

public class Unzip {
public static int BUFFER = 2048;
public void tar(String pathToTar, String outputPath) throws IOException {
    File tarFile = new File(pathToTar);
    TarArchiveInputStream tarInput =
            new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(tarFile)));

    TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
    while(currentEntry != null) {
        if (currentEntry.isDirectory()) {

            File f = new File(outputPath + currentEntry.getName());
            f.mkdirs();
        }
        else {
            int count;
            byte data[] = new byte[BUFFER];

            FileOutputStream fos = new FileOutputStream(outputPath
                    + currentEntry.getName());
            BufferedOutputStream dest = new BufferedOutputStream(fos,
                    BUFFER);
            while ((count = tarInput.read(data, 0, BUFFER)) != -1) {
                dest.write(data, 0, count);
            }
            dest.close();
        }
    }
}

}

提前致谢。

1 个答案:

答案 0 :(得分:1)

  1. sun.net.www.protocol.http.HttpURLConnection更改为java.net.HttpURLConnection

  2. fos.close()

  3. 之后添加dest.close()
  4. 您也必须在while循环中调用currentEntry = tarInput.getNextTarEntry();

  5. 启用 Cookie 接受条款和服务没有任何内容。

    这是我的完整代码。 请尝试将其与您的代码进行比较:

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.zip.GZIPInputStream;
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
    
    public class Downloader {
    
        public static final int BUFFER = 2048;
    
        private void download(String surl, String pathToSave) throws IOException {
            URL url = new URL(surl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            try (InputStream stream = con.getInputStream()) {
                Files.copy(stream, Paths.get(pathToSave));
            }
        }
    
        private void unGz(String pathToGz, String outputPath) throws IOException {
            FileInputStream fin = new FileInputStream(pathToGz);
            BufferedInputStream in = new BufferedInputStream(fin);
            try (FileOutputStream out = new FileOutputStream(outputPath)) {
                try (GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in)) {
                    final byte[] buffer = new byte[BUFFER];
                    int n = 0;
                    while (-1 != (n = gzIn.read(buffer))) {
                        out.write(buffer, 0, n);
                    }
                }
            }
        }
    
        public void unTarGz(String pathToTar, String outputPath) throws IOException {
            File tarFile = new File(pathToTar);
            TarArchiveInputStream tarInput
                    = new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(tarFile)));
    
            TarArchiveEntry currentEntry;
            while ((currentEntry = tarInput.getNextTarEntry()) != null) {
                if (currentEntry.isDirectory()) {
                    File f = new File(outputPath + currentEntry.getName());
                    f.mkdirs();
                } else {
                    int count;
                    byte data[] = new byte[BUFFER];
                    try (FileOutputStream fos = new FileOutputStream(outputPath
                            + currentEntry.getName())) {
                        try (BufferedOutputStream dest = new BufferedOutputStream(fos,
                                BUFFER)) {
                            while ((count = tarInput.read(data, 0, BUFFER)) != -1) {
                                dest.write(data, 0, count);
                            }
                        }
                    }
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
            Downloader down = new Downloader();
            down.download("https://wordpress.org/latest.tar.gz", "/tmp/latest.tar.gz");
            down.unTarGz("/tmp/latest.tar.gz", "/tmp/untar/");
        }
    }