这是代码。
package downloader;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.File;
import java.io.IOException;
public class JustATest {
public static void main(String[] args) throws IOException {
File file = new File("D:" + "//" + "Hunter x Hunter 340 - 00 - créditos.jpg");
URL url = new URL("http://leitor1.mangasproject.com/3e1e967e9b793e908f8eae83c74dba9bcccce6a5535b4b462bd9994537bfe15c/1c96b0ef48b44ff71102d96f7ac2b515a0b7be31d04d7420f3d133d923189953/Hunter x Hunter 340 - 00 - créditos.jpg");
org.apache.commons.io.FileUtils.copyURLToFile(url, file);
}
}
运行此代码时出现此错误:
Exception in thread "main" java.io.FileNotFoundException: http://leitor1.mangasproject.com/3e1e967e9b793e908f8eae83c74dba9bcccce6a5535b4b462bd9994537bfe15c/1c96b0ef48b44ff71102d96f7ac2b515a0b7be31d04d7420f3d133d923189953/Hunter x Hunter 340 - 00 - créditos.jpg
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1460)
at downloader.JustATest.main(JustATest.java:14)
我尝试使用
InputStream in = new BufferedInputStream(url.openStream());
但这也没有用。
编辑: 我现在必须说,在NetBeans中,所有代码都可以正常工作,但是,我在Eclipse中进行编码。 :( 我必须说,这个主机的大多数文件在Eclipse中运行良好。
答案 0 :(得分:2)
尝试将URLEncoder.encode(IMAGE_URL, "UTF-8")
传递给网址而不是普通图片网址。
答案 1 :(得分:1)
可能是网站不喜欢文件泄露。为了得到这一点 - 如果你有权使用这样的网站,你可以使用apache的HttpComponents首先导航到主页或页面与图像对比。不需要下载主要的html / php / jsp / xyz页面中的所有js和css,然后使用那里的cookie来获取图像。
此代码也将为您管理URL。改编自http://wiki.apache.org/HttpComponents/QuickStart
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
/**
* A example that demonstrates how HttpClient APIs can be used to perform
* form-based logon.
* based on 2008-2009 version 4 API http://hc.apache.org/
*/
public class ClientFormLogin {
public static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("https://portal.sun.com/portal/dt");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("first page get: " + response.getStatusLine());
if (entity != null) {
entity.consumeContent();
}
System.out.println("Initial set of cookies:");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
httpget = new HttpGet("<url-to-img>");
response = httpclient.execute(httpget);
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
byte[] data = HttpEntity.toByteArray(response);
//save to file
}
System.out.println("Post logon cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
}
}
答案 2 :(得分:1)
我正在回答我的问题,说我发现了这个问题。 在Eclipse中: 右键单击.class&gt; Propertie 在“资源”中,更改“编码”设置。 我的是Cp1252。我改为UTF-8,我的代码变得一团糟。我修好了它,现在它正在工作。
所有答案实际上都是正确的,因为我必须将“空格”更改为“%20”和其他内容。 谢谢。
答案 3 :(得分:0)
您可能需要对网址进行url编码。
答案 4 :(得分:0)
请注意,您的网址包含空格和é
。例如,空格通常编码为%20
。您需要对URL进行编码才能正确使用它。
有关详细信息,请参阅
编码也会对http://
进行编码,因此您需要对重要部分进行编码,a.k.a是文件的名称。尝试这样的事情:
String strUrl = "http://leitor1.mangasproject.com/3e1e967e9b793e908f8eae83c74dba9bcccce6a5535b4b462bd9994537bfe15c/1c96b0ef48b44ff71102d96f7ac2b515a0b7be31d04d7420f3d133d923189953/";
strUtil.append(URLEncoder.encode("Hunter x Hunter 340 - 00 - créditos.jpg", "UTF-8"));
URL url = new URL(strUrl);
org.apache.commons.io.FileUtils.copyURLToFile(url, file);
此示例使用“UTF-8”作为charset编码,但还有其他支持的选项。尝试列出here的任何标准字符集。
答案 5 :(得分:0)
URLEncoder看起来不是最好的解决方案。此代码有效:
File file = new File("D:" + "//" + "Hunter x Hunter 340 - 00 - créditos.jpg");
URI uri = new URI ("http", "leitor1.mangasproject.com",
"/3e1e967e9b793e908f8eae83c74dba9bcccce6a5535b4b462bd9994537bfe15c/1c96b0ef48b44ff71102d96f7ac2b515a0b7be31d04d7420f3d133d923189953/Hunter x Hunter 340 - 00 - créditos.jpg",
null );
org.apache.commons.io.FileUtils.copyURLToFile(uri.toURL(), file);
我在这里使用java.net.URI课程进行转义。请注意,我正在使用URI类构造函数,其中我将"http"
作为第一个参数传递,"leitor1.mangasproject.com"
作为第二个参数,其余的URL作为第三个参数,null作为第四个参数