java - 如何区分pdf文件和非pdf文件?

标签 java pdf infinite-loop urlconnection

我使用以下代码片段下载 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/

相关文章:

Java D 堆实现 - deleteMin() 中的无限循环

java - 父/子序列化本地类不兼容异常

c# - 将html文件转换成PDF文件?

java - 如何用java读取pdf文件

php - 在浏览器中使用 PHP 在 PDF 上进行注释和绘图,然后再次保存为 PDF 格式

loops - Rust 如何知道何时停止迭代没有上限的范围?

python - RSA 编码和解码 [e,d]。在 python 中查找 e 和 d.. 更新

java - (hello-> h3o) 如何替换字符串中的中间字母以获取替换字母的数量

java - 当系统时间更改时,正在运行的计时器会发生什么情况?

java - 查找按字典顺序排序的字符串的子集,其中包含以相同模式开头的 unicode 字符