Javaを使用してインターネットからファイルをダウンロードして保存する方法


425

http://www.example.com/information.aspを取得してディレクトリに保存する必要があるオンラインファイル(など)があります。オンラインファイル(URL)を1行ずつ取得して読み取る方法はいくつかありますが、Javaを使用してファイルをダウンロードして保存する方法はありますか?


回答:


560

与えるのJava NIOに試して:

URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

を使用するtransferFrom()と、ソースチャネルから読み取り、このチャネルに書き込む単純なループよりもはるかに効率的になる可能性があります。多くのオペレーティングシステムは、実際にバイトをコピーせずに、バイトをソースチャネルからファイルシステムキャッシュに直接転送できます。

詳しくはこちらをご覧ください

:transferFromの3番目のパラメーターは、転送する最大バイト数です。 Integer.MAX_VALUE最大2 ^ 31バイトを転送しLong.MAX_VALUE、最大2 ^ 63バイトを許可します(既存のどのファイルよりも大きい)。


22
Java 7で3つすべてを閉じます。 (readableByteChannel、0、1 << 24); }
mazatwork

80
:これは、ファイルの最初の16メガバイトダウンロードしますstackoverflow.com/questions/8405062/downloading-files-with-java
ベン・マッキャン

31
@kirdie、そして8388608結核以上のものが欲しいなら?
Cruncher 2013年

22
1回の呼び出しでは不十分です。transferFrom()isnt 'は、1回の呼び出しで転送全体を完了するように指定されています。それがカウントを返す理由です。あなたはループする必要があります。
ローン侯爵2014

11
なぜこの答えは受け入れられたのですか?URL::openStream()通常のストリームのみを返します。つまり、トラフィック全体がネイティブバッファに留まるのではなく、Java byte []配列を通じてコピーされます。fos.getChannel()実際にはネイティブチャネルだけなので、オーバーヘッドは完全に残ります。この場合、NIOを使用しても利益はゼロです。EJPとBen MacCannが正しく気づいたように、壊れたことは別として
Ext3h 2015

495

apache commons-ioを使用します。コードは1行だけです。

FileUtils.copyURLToFile(URL, File)

22
いいね!まさに私が探しているもの!Apacheライブラリがすでにこれをカバーしていることを知っていました。ところで、タイムアウトパラメータ付きのオーバーロードバージョンを使用することをお勧めします。
ヘンディイラワン2012年

6
...そしてそのオーバーロードされたバージョンを使用する場合、タイムアウトは秒単位ではなくミリ秒単位で指定されることに注意してください。
ラースローファンデンホーク

5
copyURLToFilewith timeoutパラメータはCommons IOライブラリのバージョン2.0以降でのみ使用可能であることに注意してください。Javaドキュメントを
Stanley

6
基本認証ヘッダーをリクエストに追加する必要がある場合はどうなりますか?回避策はありますか?
ダミアン

3
これは「短い」ですが、実際には非常に低速です。
Meinkraft 2015

123

より簡単なnioの使用法:

URL website = new URL("http://www.website.com/information.asp");
try (InputStream in = website.openStream()) {
    Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
}

5
残念ながら、「302が見つかりました」などのリダイレクトがある場合、これは通知なしに失敗します(ダウンロード0バイト)。
Alexander K

1
@AlexanderKしかし、なぜあなたはとにかくそのようなリソースを盲目的にダウンロードするのですか?
xuesheng

5
これはエレガントなソリューションであるという事実にもかかわらず、舞台裏では、このアプローチは静かにあなたを裏切る可能性があります。Files.copy(InputStream、Paths、FileOption)は、コピープロセスをFiles.copy(InputStream、OutputStream)に委任します。この最後のメソッドは、ストリームの終わり(-1)をチェックしませんが、バイト読み取りがない(0)かどうかをチェックします。つまり、ネットワークが少し休止している場合、OSによるストリームのダウンロードが完了していなくても、0バイトを読み取ってコピープロセスを終了する可能性があります。
Miere

6
@Miere InputStream.read()長さゼロのバッファまたはカウント、「少し休止」などを指定しない限り、ゼロを返すことは不可能です。少なくとも1バイトが転送されるか、ストリームの終わりかエラーが発生するまでブロックします。の内部についてのあなたの主張Files.copy()は根拠がありません。
ローン侯爵

3
2.6TiBでバイナリファイルを読み取る単体テストがあります。Files.copyを使用すると、HDDストレージサーバー(XFS)では常に失敗しますが、SSHで数回失敗します。JDK 8を見ると、File.copyのコードが「> 0」をチェックして「while」ループを抜けることを確認しました。まったく同じコードを-1でコピーしただけで、両方の単体テストが停止することはありません。InputStreamがネットワークおよびローカルファイル記述子を表すことができ、両方のIO操作がOSコンテキストの切り替えの影響を受けると、私の主張が根拠のない理由がわかりません。運がよければうまくいくと主張する人もいるかもしれませんが、頭痛の種はもうありません。
Miere、2016

85
public void saveUrl(final String filename, final String urlString)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename);

        final byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}

おそらくこのメソッドの外部で、例外を処理する必要があります。


6
非常に速くダウンロードするには?ダウンロードアクセラレータが好きですか?
digz6666 2012年

11
in.close例外をスローした場合、fout.close呼び出されません。
ベリリウム2013

1
@ComFreekそれは単に真実ではありません。a BufferedInputStreamを使用しても、ソケットのタイムアウトにはまったく影響がありません。私は、あなたが引用した「背景の詳細​​」に対する私のコメントの中で「都市神話」としてそれをすでに反駁していました。3年前。
ローン侯爵2014

@EJP訂正ありがとうございます!私はコメントを削除しました(アーカイブの場合:「予期しないエラーが発生する可能性がある」と述べたこの回答にリンクしましたBufferedInputStream)。
ComFreek 14

+1この回答(およびここでは他の回答)に対する私の唯一の異論は、発信者が「見つからない」イベントを接続エラー(再試行が必要になる可能性がある)と区別できないことです。
leonbloy

24

これは古い質問ですが、リソースが適切に閉じられた、簡潔で読みやすいJDKのみのソリューションを次に示します。

public static void download(String url, String fileName) throws Exception {
    try (InputStream in = URI.create(url).toURL().openStream()) {
        Files.copy(in, Paths.get(fileName));
    }
}

2行のコードで依存関係はありません。


疑問に思っている方のために、このコードスニペットに必要なインポートは次のimport java.io.InputStream; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths;
とおりです。– BelovedFool

23

ファイルをダウンロードするには、何らかの方法でファイルを調べる必要があるいずれかの方法で、ファイルを読み取る必要があります。行ごとではなく、ストリームからバイト単位で読み取ることができます。

BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
    byte data[] = new byte[1024];
    int count;
    while((count = in.read(data,0,1024)) != -1)
    {
        out.write(data, 0, count);
    }

17

Java 7+次の方法を使用して、インターネットからファイルをダウンロードし、いくつかのディレクトリに保存します。

private static Path download(String sourceURL, String targetDirectory) throws IOException
{
    URL url = new URL(sourceURL);
    String fileName = sourceURL.substring(sourceURL.lastIndexOf('/') + 1, sourceURL.length());
    Path targetPath = new File(targetDirectory + File.separator + fileName).toPath();
    Files.copy(url.openStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);

    return targetPath;
}

ドキュメントはこちら


16

この回答は選択した回答とほぼ同じですが、2つの拡張機能があります。それはメソッドであり、FileOutputStreamオブジェクトを閉じます。

    public static void downloadFileFromURL(String urlString, File destination) {    
        try {
            URL website = new URL(urlString);
            ReadableByteChannel rbc;
            rbc = Channels.newChannel(website.openStream());
            FileOutputStream fos = new FileOutputStream(destination);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.close();
            rbc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2
1回の呼び出しでは不十分です。transferFrom()isnt 'は、1回の呼び出しで転送全体を完了するように指定されています。それがカウントを返す理由です。あなたはループする必要があります。
ローン侯爵

10
import java.io.*;
import java.net.*;

public class filedown {
    public static void download(String address, String localFileName) {
        OutputStream out = null;
        URLConnection conn = null;
        InputStream in = null;

        try {
            URL url = new URL(address);
            out = new BufferedOutputStream(new FileOutputStream(localFileName));
            conn = url.openConnection();
            in = conn.getInputStream();
            byte[] buffer = new byte[1024];

            int numRead;
            long numWritten = 0;

            while ((numRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, numRead);
                numWritten += numRead;
            }

            System.out.println(localFileName + "\t" + numWritten);
        } 
        catch (Exception exception) { 
            exception.printStackTrace();
        } 
        finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            } 
            catch (IOException ioe) {
            }
        }
    }

    public static void download(String address) {
        int lastSlashIndex = address.lastIndexOf('/');
        if (lastSlashIndex >= 0 &&
        lastSlashIndex < address.length() - 1) {
            download(address, (new URL(address)).getFile());
        } 
        else {
            System.err.println("Could not figure out local file name for "+address);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            download(args[i]);
        }
    }
}

5
in.close例外をスローした場合、out.close呼び出されません。
ベリリウム2013

8

個人的には、ApacheのHttpClientは、これに関して私がする必要があるすべての能力を超えるものであることがわかりました。 これはHttpClientの使用に関する素晴らしいチュートリアルです


2
またcommons-ioは素晴らしいライブラリです
dfa '28年

6

これは、try-withステートメントを使用したBrian Riskの回答に基づく別のjava7バリアントです。

public static void downloadFileFromURL(String urlString, File destination) throws Throwable {

      URL website = new URL(urlString);
      try(
              ReadableByteChannel rbc = Channels.newChannel(website.openStream());
              FileOutputStream fos = new FileOutputStream(destination);  
              ){
          fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
      }

  }

1回の呼び出しでは不十分です。transferFrom()isnt 'は、1回の呼び出しで転送全体を完了するように指定されています。それがカウントを返す理由です。あなたはループする必要があります。
ローン侯爵

なぜあなたが私にその愚かな質問に答えているのか分かりません。それは私が言ったこととは何の関係もありません、そして私は本当に口に言葉を入れることを拒否します。
ローン侯爵

2

HttpComponents代わりにApacheでファイルをダウンロードすることが可能ですCommons-IO。このコードを使用すると、URLに従ってJavaでファイルをダウンロードし、特定の宛先に保存できます。

public static boolean saveFile(URL fileURL, String fileSavePath) {

    boolean isSucceed = true;

    CloseableHttpClient httpClient = HttpClients.createDefault();

    HttpGet httpGet = new HttpGet(fileURL.toString());
    httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
    httpGet.addHeader("Referer", "https://www.google.com");

    try {
        CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity fileEntity = httpResponse.getEntity();

        if (fileEntity != null) {
            FileUtils.copyInputStreamToFile(fileEntity.getContent(), new File(fileSavePath));
        }

    } catch (IOException e) {
        isSucceed = false;
    }

    httpGet.releaseConnection();

    return isSucceed;
}

1行のコードとは対照的です。

FileUtils.copyURLToFile(fileURL, new File(fileSavePath),
                        URLS_FETCH_TIMEOUT, URLS_FETCH_TIMEOUT);

このコードを使用すると、プロセスをより詳細に制御でき、タイムアウトだけでなく、多くのWebサイトにとって重要な値User-AgentReferer値を指定できます。


2

ここには多くのエレガントで効率的な答えがあります。ただし、簡潔であるため、いくつかの有用な情報が失われる可能性があります。特に、接続エラーをExceptionと見なしたくないことがよくあります。たとえば、ダウンロードを再試行する必要があるかどうかを判断するためなど、ネットワーク関連のエラーを別の方法で処理したい場合があります。

ネットワークエラーに対して例外をスローしないメソッドは次のとおりです(不正なURLまたはファイルへの書き込みの問題など、本当に例外的な問題の場合のみ)

/**
 * Downloads from a (http/https) URL and saves to a file. 
 * Does not consider a connection error an Exception. Instead it returns:
 *  
 *    0=ok  
 *    1=connection interrupted, timeout (but something was read)
 *    2=not found (FileNotFoundException) (404) 
 *    3=server error (500...) 
 *    4=could not connect: connection timeout (no internet?) java.net.SocketTimeoutException
 *    5=could not connect: (server down?) java.net.ConnectException
 *    6=could not resolve host (bad host, or no internet - no dns)
 * 
 * @param file File to write. Parent directory will be created if necessary
 * @param url  http/https url to connect
 * @param secsConnectTimeout Seconds to wait for connection establishment
 * @param secsReadTimeout Read timeout in seconds - trasmission will abort if it freezes more than this 
 * @return See above
 * @throws IOException Only if URL is malformed or if could not create the file
 */
public static int saveUrl(final Path file, final URL url, 
  int secsConnectTimeout, int secsReadTimeout) throws IOException {
    Files.createDirectories(file.getParent()); // make sure parent dir exists , this can throw exception
    URLConnection conn = url.openConnection(); // can throw exception if bad url
    if( secsConnectTimeout > 0 ) conn.setConnectTimeout(secsConnectTimeout * 1000);
    if( secsReadTimeout > 0 ) conn.setReadTimeout(secsReadTimeout * 1000);
    int ret = 0;
    boolean somethingRead = false;
    try (InputStream is = conn.getInputStream()) {
        try (BufferedInputStream in = new BufferedInputStream(is); OutputStream fout = Files
                .newOutputStream(file)) {
            final byte data[] = new byte[8192];
            int count;
            while((count = in.read(data)) > 0) {
                somethingRead = true;
                fout.write(data, 0, count);
            }
        }
    } catch(java.io.IOException e) { 
        int httpcode = 999;
        try {
            httpcode = ((HttpURLConnection) conn).getResponseCode();
        } catch(Exception ee) {}
        if( somethingRead && e instanceof java.net.SocketTimeoutException ) ret = 1;
        else if( e instanceof FileNotFoundException && httpcode >= 400 && httpcode < 500 ) ret = 2; 
        else if( httpcode >= 400 && httpcode < 600 ) ret = 3; 
        else if( e instanceof java.net.SocketTimeoutException ) ret = 4; 
        else if( e instanceof java.net.ConnectException ) ret = 5; 
        else if( e instanceof java.net.UnknownHostException ) ret = 6;  
        else throw e;
    }
    return ret;
}

2

以下は、Javaコードを使用してインターネットから映画をダウンロードするためのサンプルコードです。

URL url = new 
URL("http://103.66.178.220/ftp/HDD2/Hindi%20Movies/2018/Hichki%202018.mkv");
    BufferedInputStream bufferedInputStream = new  BufferedInputStream(url.openStream());
    FileOutputStream stream = new FileOutputStream("/home/sachin/Desktop/test.mkv");


    int count=0;
    byte[] b1 = new byte[100];

    while((count = bufferedInputStream.read(b1)) != -1) {
        System.out.println("b1:"+b1+">>"+count+ ">> KB downloaded:"+new File("/home/sachin/Desktop/test.mkv").length()/1024);
        stream.write(b1, 0, count);
    }

一般的に、回答にコードの目的、および他の人を紹介することなく問題を解決する理由の説明が含まれている場合、回答ははるかに役立ちます。
Tim Diekmann、2018年

1

以下の簡単な使用には問題があります。

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 

非常に大きなファイルをダウンロードして保存する必要がある場合、または一般的に接続が切断された場合に自動再試行が必要な場合。

このような場合に私が提案するのは、Apache HttpClientとorg.apache.commons.io.FileUtilsです。例えば:

GetMethod method = new GetMethod(resource_url);
try {
    int statusCode = client.executeMethod(method);
    if (statusCode != HttpStatus.SC_OK) {
        logger.error("Get method failed: " + method.getStatusLine());
    }       
    org.apache.commons.io.FileUtils.copyInputStreamToFile(
        method.getResponseBodyAsStream(), new File(resource_file));
    } catch (HttpException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    method.releaseConnection();
}

1

以前の回答を要約する(そして、どういうわけか磨き、更新する)ため。次の3つの方法は実質的に同等です。(明示的なタイムアウトを追加したのは、それが必須であると思うからです。接続が失われたときにダウンロードが永久にフリーズすることは望んでいません。)

public static void saveUrl1(final Path file, final URL url,
   int secsConnectTimeout, int secsReadTimeout)) 
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (BufferedInputStream in = new BufferedInputStream(
       streamFromUrl(url, secsConnectTimeout,secsReadTimeout)  );
        OutputStream fout = Files.newOutputStream(file)) {
        final byte data[] = new byte[8192];
        int count;
        while((count = in.read(data)) > 0)
            fout.write(data, 0, count);
    }
}

public static void saveUrl2(final Path file, final URL url,
   int secsConnectTimeout, int secsReadTimeout))  
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (ReadableByteChannel rbc = Channels.newChannel(
      streamFromUrl(url, secsConnectTimeout,secsReadTimeout) 
        );
        FileChannel channel = FileChannel.open(file,
             StandardOpenOption.CREATE, 
             StandardOpenOption.TRUNCATE_EXISTING,
             StandardOpenOption.WRITE) 
        ) {
        channel.transferFrom(rbc, 0, Long.MAX_VALUE);
    }
}

public static void saveUrl3(final Path file, final URL url, 
   int secsConnectTimeout, int secsReadTimeout))  
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (InputStream in = streamFromUrl(url, secsConnectTimeout,secsReadTimeout) ) {
        Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING);
    }
}

public static InputStream streamFromUrl(URL url,int secsConnectTimeout,int secsReadTimeout) throws IOException {
    URLConnection conn = url.openConnection();
    if(secsConnectTimeout>0) conn.setConnectTimeout(secsConnectTimeout*1000);
    if(secsReadTimeout>0) conn.setReadTimeout(secsReadTimeout*1000);
    return conn.getInputStream();
}

大きな違いは見つかりませんでした。安全で効率的です。(速度の違いはほとんど関係がないようです-私は、ローカルサーバーからSSDディスクに180Mbを書き込みますが、1.2から1.5セグメントで変動します)。それらは外部ライブラリを必要としません。すべてが任意のサイズと(私の経験では)HTTPリダイレクトで動作します。

さらに、FileNotFoundExceptionリソースが見つからない場合(通常、エラー404)、およびjava.net.UnknownHostExceptionDNS解決に失敗した場合は、すべてスローされます。その他のIOExceptionは、送信中のエラーに対応しています。

(コミュニティウィキとしてマークされています。情報や修正を自由に追加してください)


1

underscore-javaライブラリにはメソッドU.fetch(url)があります。

pom.xml:

  <groupId>com.github.javadev</groupId>
  <artifactId>underscore</artifactId>
  <version>1.45</version>

コード例:

import com.github.underscore.lodash.U;

public class Download {
    public static void main(String ... args) {
        String text = U.fetch("https://stackoverflow.com/questions"
        + "/921262/how-to-download-and-save-a-file-from-internet-using-java").text();
    }
}

リンクが無効になったときに、この回答はどの程度役に立ちますか?回答方法を
JimHawkins 2017

あなたのコードはコンパイルされません。質問はで解決策を求めてJavaいますが、答えは次のようになりますJavaScript
talex

@talex pom.xmlセクションを追加し、コード例を改善しました。
Valentyn Kolesnikov 2017

0
public class DownloadManager {

    static String urls = "[WEBSITE NAME]";

    public static void main(String[] args) throws IOException{
        URL url = verify(urls);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        InputStream in = null;
        String filename = url.getFile();
        filename = filename.substring(filename.lastIndexOf('/') + 1);
        FileOutputStream out = new FileOutputStream("C:\\Java2_programiranje/Network/DownloadTest1/Project/Output" + File.separator + filename);
        in = connection.getInputStream();
        int read = -1;
        byte[] buffer = new byte[4096];
        while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);
            System.out.println("[SYSTEM/INFO]: Downloading file...");
        }
        in.close();
        out.close();
        System.out.println("[SYSTEM/INFO]: File Downloaded!");
    }
    private static URL verify(String url){
        if(!url.toLowerCase().startsWith("http://")) {
            return null;
        }
        URL verifyUrl = null;

        try{
            verifyUrl = new URL(url);
        }catch(Exception e){
            e.printStackTrace();
        }
        return verifyUrl;
    }
}

単にダンプするのではなく、コードがどのように機能するかについての情報を提供することで、回答を改善できます。
Matej Kormuth 2017


0

プロキシの背後にいる場合は、次のようにJavaプログラムでプロキシを設定できます。

        Properties systemSettings = System.getProperties();
        systemSettings.put("proxySet", "true");
        systemSettings.put("https.proxyHost", "https proxy of your org");
        systemSettings.put("https.proxyPort", "8080");

プロキシの背後にいない場合は、コードに上記の行を含めないでください。プロキシの背後にいるときにファイルをダウンロードするための完全に機能するコード。

public static void main(String[] args) throws IOException {
        String url="https://raw.githubusercontent.com/bpjoshi/fxservice/master/src/test/java/com/bpjoshi/fxservice/api/TradeControllerTest.java";
        OutputStream outStream=null;
        URLConnection connection=null;
        InputStream is=null;
        File targetFile=null;
        URL server=null;
        //Setting up proxies
        Properties systemSettings = System.getProperties();
            systemSettings.put("proxySet", "true");
            systemSettings.put("https.proxyHost", "https proxy of my organisation");
            systemSettings.put("https.proxyPort", "8080");
            //The same way we could also set proxy for http
            System.setProperty("java.net.useSystemProxies", "true");
            //code to fetch file
        try {
            server=new URL(url);
            connection = server.openConnection();
            is = connection.getInputStream();
            byte[] buffer = new byte[is.available()];
            is.read(buffer);

                targetFile = new File("src/main/resources/targetFile.java");
                outStream = new FileOutputStream(targetFile);
                outStream.write(buffer);
        } catch (MalformedURLException e) {
            System.out.println("THE URL IS NOT CORRECT ");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Io exception");
            e.printStackTrace();
        }
        finally{
            if(outStream!=null) outStream.close();
        }
    }

0

新しいチャネルを使用する1番目の方法

ReadableByteChannel aq = Channels.newChannel(new url("https//asd/abc.txt").openStream());
FileOutputStream fileOS = new FileOutputStream("C:Users/local/abc.txt")
FileChannel writech = fileOS.getChannel();

FileUtilsを使用する2番目の方法

FileUtils.copyURLToFile(new url("https//asd/abc.txt",new local file on system("C":/Users/system/abc.txt"));

使用する3番目の方法

InputStream xy = new ("https//asd/abc.txt").openStream();

これは、基本的なJavaコードと他のサードパーティライブラリを使用してファイルをダウンロードする方法です。これらはクイックリファレンス用です。詳細な情報やその他のオプションを取得するには、上記のキーワードでグーグルしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.