以下是使用 Java 实现从指定网站下载图片的示例代码,主要借助java.net.URL
和java.nio.file.Files
等相关类来完成,示例代码以下载一张图片为例,并且假设图片的链接是已知的,以下是具体步骤:
- 导入必要的包
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
- 编写下载图片的方法
public class ImageDownloader {
public static void downloadImage(String imageUrl, String destinationPath) {
try (InputStream in = new URL(imageUrl).openStream();
FileOutputStream out = new FileOutputStream(destinationPath)) {
// 方式一:通过逐个字节读取写入的方式(效率相对低些)
// int byteRead;
// byte[] buffer = new byte[1024];
// while ((byteRead = in.read(buffer))!= -1) {
// out.write(buffer, 0, byteRead);
// }
// 方式二:利用Java NIO的Files.copy方法(效率更高些)
Files.copy(in, Paths.get(destinationPath), StandardCopyOption.REPLACE_EXISTING);
System.out.println("图片下载成功!");
} catch (IOException e) {
System.out.println("图片下载出现错误: " + e.getMessage());
}
}
public static void main(String[] args) {
String imageUrl = "https://example.com/some_image.jpg"; // 这里替换成实际的图片网址
String destinationPath = "C:/downloaded_image.jpg"; // 这里替换成你想要保存图片的本地路径
downloadImage(imageUrl, destinationPath);
}
}
downloadImage
方法接受两个参数,imageUrl
是要下载的图片在网络上的地址,destinationPath
是要保存到本地的文件路径。- 在方法内部,首先通过
URL
类打开图片对应的网络输入流,同时创建一个指向本地文件的输出流。然后提供了两种将输入流数据写入输出流(也就是下载图片到本地的方式),一种是传统的逐个字节读取写入的方式(代码中被注释掉了,可以取消注释查看效果),另一种是利用 Java NIO 的Files.copy
方法,它在处理文件复制等操作时效率更高,并且可以通过StandardCopyOption.REPLACE_EXISTING
选项来指定如果目标文件已存在就替换它。 - 在
main
方法中,只是简单示例了传入一个图片网址和本地保存路径来调用downloadImage
方法进行下载,实际使用时你可以根据需求灵活修改这两个参数的值,比如可以通过命令行参数传入或者从配置文件中读取等方式来获取图片网址和保存路径。
- 确保你的代码所在环境有访问对应网站的网络权限,否则可能会出现连接超时等网络相关的异常情况。
- 图片的链接要确保准确无误,并且目标网站允许你进行这样的下载操作,否则可能涉及违反网站使用条款甚至是法律问题(比如未经授权下载受版权保护的图片等)。
- 导入 Jsoup 相关包
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
2. 修改后的downloadImage
方法和新增的批量下载方法
public class ImageDownloader {
// 下载单个图片的方法,和之前类似
public static void downloadImage(String imageUrl, String destinationPath) {
// 此处代码省略,和之前一样的实现
}
public static void downloadAllImagesFromPage(String pageUrl, String saveDirectory) {
try {
Document doc = Jsoup.connect(pageUrl).get();
Elements imgElements = doc.select("img[src]");
for (Element imgElement : imgElements) {
String imgUrl = imgElement.absUrl("src");
String fileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1);
String destinationPath = saveDirectory + "/" + fileName;
downloadImage(imgUrl, destinationPath);
}
System.out.println("网页内所有图片下载完成!");
} catch (IOException e) {
System.out.println("下载网页图片出现错误: " + e.getMessage());
}
}
public static void main(String[] args) {
String pageUrl = "https://example.com"; // 替换成实际的网页网址
String saveDirectory = "C:/downloaded_images"; // 替换成实际的本地保存目录
downloadAllImagesFromPage(pageUrl, saveDirectory);
}
}
downloadAllImagesFromPage
方法用于批量下载网页内的图片,它首先使用 Jsoup 库连接到指定的网页并获取其文档对象(Document
),然后通过 CSS 选择器img[src]
来选取所有带有src
属性的图片元素,接着循环遍历这些元素,获取每张图片的绝对地址(absUrl
方法),提取出文件名用于生成本地保存路径,最后调用downloadImage
方法来下载每张图片到指定的本地目录下。