我使用以下代码片段下载 pdf 文件(我从 here 获取它,归功于 Josh M )
public final class FileDownloader {
private FileDownloader(){}
public static void main(String args[]) throws IOException{
download("http://pdfobject.com/pdf/sample.pdf", new File("sample.pdf"));
}
public static void download(final String url, final File destination) throws IOException {
final URLConnection connection = new URL(url).openConnection();
connection.setConnectTimeout(60000);
connection.setReadTimeout(60000);
connection.addRequestProperty("User-Agent", "Mozilla/5.0");
final FileOutputStream output = new FileOutputStream(destination, false);
final byte[] buffer = new byte[2048];
int read;
final InputStream input = connection.getInputStream();
while((read = input.read(buffer)) > -1)
output.write(buffer, 0, read);
output.flush();
output.close();
input.close();
}
}
它可以完美地处理 pdf 文件。但是,当我遇到一个“坏文件”时......我不知道该文件的扩展名是什么,但似乎我陷入了 while((read = input.read(buffer)) 的无限循环> -1)
。如何改进此代码片段以丢弃任何类型的不适当文件(非 pdf)?
最佳答案
有一个问题有类似的问题:Infinite Loop in Input Stream .
查看可能的解决方案:Abort loop after fixed time .
您可以尝试设置连接超时:Java URLConnection Timeout .
关于java - 如何区分pdf文件和非pdf文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003321/