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