java - 从互联网下载文件并提取其中的一些内容

标签 java download

我正在创建一个从互联网下载文件的程序。 我对链接进行了子串,因为我想从链接中获取文件名。 这就是我到目前为止所拥有的。

package main;

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

public class Main {

    public static void main(String[] args) {

        String url = "https://www.dropbox.com/s/8awaehjdh81fqam/CacheName.zip?dl=1";
        int lastSlashIndex = url.lastIndexOf('/');
        String filename= url.substring(lastSlashIndex + 1, 5);

        try{
            URL website = new URL(url);
            ReadableByteChannel rbc = Channels.newChannel(website.openStream());
            FileOutputStream fos = new FileOutputStream(filename);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        }catch(Exception e){ e.printStackTrace(); }

    }

}

它不下载文件,我收到此错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -37
    at java.lang.String.substring(Unknown Source)
    at main.Main.main(Main.java:14)

最佳答案

根据 Java 文档,public String substring(int beginIndex, int endIndex) 是调用 substring 方法的方式。按照您的调用方式,它从 lastSlashIndex + 1 开始,到索引 5 结束(向后移动,不起作用)。这就是为什么异常说它超出索引 -37 的范围。

您想要更像 url.substring(lastSlashIndex + 1, lastSlashIndex + 1 + 5);

关于java - 从互联网下载文件并提取其中的一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038230/

相关文章:

java - 预检响应没有 HTTP 正常状态。

java - 避免使用数据库在 Java EE 应用程序上存储少量数据

java - spring-mvc 下载 Action

c# - 文件下载到浏览器后如何修改页面?

javascript - 在 Google Chrome 中捕获下载

java - 单参数方法命名: repeat paramter in method name

java - 拥有线程对象锁与类锁

java - 是 8.5.5。 Web 应用程序在启动期间出现 NoSuchFieldError

core-data - NSURLSession 下载很多文件,我应该如何更新元数据?

javascript - 使用javascript下载文件弹出框