【问题标题】:How to distinguish pdf and non pdf files?如何区分pdf和非pdf文件?
【发布时间】:2013-11-28 23:29:05
【问题描述】:

我使用下面的 sn-p 下载了 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)的无限循环。如何改进这个 sn-p 以丢弃任何类型的不适当文件(非 pdf)?

【问题讨论】:

  • 它适用于 pdf 文件。但是,当我遇到“坏文件” 时,您是否检查过这是否真的是 PDF 或不是 PDF 的问题?这种情况你检查过目标文件的内容吗?

标签: java pdf infinite-loop urlconnection


【解决方案1】:

有一个类似问题的问题:Infinite Loop in Input Stream

查看可能的解决方案:Abort loop after fixed time

您可以尝试为连接设置超时:Java URLConnection Timeout

【讨论】:

  • +1 谢谢。该解决方案适用于小批量。但是,每次下载都启动一个新线程是不切实际的。我有大约 3700 万个文件要检查
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多