如何使用 Java 下载 WordPress

How to download WordPress with Java

我想用 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));
    }
}

我正在使用这个 url 下载最新版本的 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. sun.net.www.protocol.http.HttpURLConnection改为java.net.HttpURLConnection

  2. dest.close()

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

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/");
    }
}