如何从 Java 中的给定 URL 下载 PDF? [复制]

Posted

技术标签:

【中文标题】如何从 Java 中的给定 URL 下载 PDF? [复制]【英文标题】:How to download a PDF from a given URL in Java? [duplicate] 【发布时间】:2013-12-14 11:14:42 【问题描述】:

我想制作一个 Java 应用程序,该应用程序在执行时会从 URL 下载文件。有没有我可以使用的功能来做到这一点?

这段代码仅适用于.txt 文件:

URL url= new URL("http://cgi.di.uoa.gr/~std10108/a.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()));
PrintWriter writer = new PrintWriter("file.txt", "UTF-8");

String inputLine;
while ((inputLine = in.readLine()) != null)
   writer.write(inputLine+ System.getProperty( "line.separator" ));               
   System.out.println(inputLine);

writer.close();
in.close();

【问题讨论】:

不一样,因为我不想下载整个网站,而是下载它的文件!不过谢谢! 是一样的。这个问题不是在问如何下载整个网站。 【参考方案1】:

不要在此处使用 Readers 和 Writers,因为它们旨在处理 PDF 不是的原始文本文件(因为它还包含许多其他信息,例如有关字体的信息,甚至图像)。而是使用 Streams 来复制所有 原始字节

所以使用URL 类打开连接。然后只需从其 InputStream 读取并将原始字节写入您的文件。

(这是简化的示例,您仍然需要处理异常并确保在正确的位置关闭流)

System.out.println("opening connection");
URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG");
InputStream in = url.openStream();
FileOutputStream fos = new FileOutputStream(new File("yourFile.jpg"));

System.out.println("reading from resource and writing to file...");
int length = -1;
byte[] buffer = new byte[1024];// buffer for portion of data from connection
while ((length = in.read(buffer)) > -1) 
    fos.write(buffer, 0, length);

fos.close();
in.close();
System.out.println("File downloaded");

从 Java 7 开始,我们还可以使用Files.copy 和try-with-resources 来自动关闭 InputStream(在这种情况下不必手动关闭流):

URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG");
try (InputStream in = url.openStream()) 
   Files.copy(in, Paths.get("someFile.jpg"), StandardCopyOption.REPLACE_EXISTING);
 catch (IOException e) 
   // handle exception

【讨论】:

你的意思是用赋值运算符作为while循环的参数吗? @louiemcconnell 是的。此逻辑与第一个示例相同:docs.oracle.com/javase/tutorial/networking/urls/… 但不是读取行,而是读取字节。

以上是关于如何从 Java 中的给定 URL 下载 PDF? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从url数组循环下载swift4中的pdf

如何使用 Python 从指向子 URL 的 URL 下载 pdf 文件

从url下载pdf,在flutter中保存到android中的手机本地存储

java实现从url路径中下载pdf文档到本地

如何测量从 URL 下载的 PDF 的大小

RN从IOS中的URL获取blob下载docx或pdf