Java - インターネットからファイルをダウンロードする方法

Java –インターネットからファイルをダウンロードする方法

この記事では、次の方法を使用してURLからファイルをダウンロードする方法を示します。

  1. Apache Commons IO

  2. Java NIO

1. Apache Commons IO

1.1 This is still my prefer way to download a file from the Internet, simple and clean. 署名を読む:

org.apache.commons.io.FileUtils

//int = number of milliseconds
public static void copyURLToFile(URL source, File destination,
            int connectionTimeout, int readTimeout) throws IOException

1.2 Full example.

HttpUtils.java

package com.example;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class HttpUtils {

    public static void main(String[] args) {

        String fromFile = "ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest";
        String toFile = "F:\\arin.txt";

        try {

            //connectionTimeout, readTimeout = 10 seconds
            FileUtils.copyURLToFile(new URL(fromFile), new File(toFile), 10000, 10000);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

1.3 Maven

pom.xml


    commons-io
    commons-io
    2.5

1.4 Gradle

build.gradle

dependencies {
    compile 'commons-io:commons-io:2.5'
}

2. Java NIO

2.1 Try Java 7 NIO example.

    URL website = new URL(fromFile);
    ReadableByteChannel rbc = Channels.newChannel(website.openStream());
    FileOutputStream fos = new FileOutputStream(toFile);
    fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
    fos.close();
    rbc.close();

2.2 Full example.

HttpUtils.java

package com.example;

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

public class HttpUtils {

    public static void main(String[] args) {

        String fromFile = "ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest";
        String toFile = "F:\\arin.txt";

        try {

            URL website = new URL(fromFile);
            ReadableByteChannel rbc = Channels.newChannel(website.openStream());
            FileOutputStream fos = new FileOutputStream(toFile);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.close();
            rbc.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}