Java FileOutputStream返回0个大小的文件

时间:2017-08-02 13:48:30

标签: java url while-loop download fileoutputstream

我已经整理了一个程序,该程序接收一个特定的URL,然后扫描一个以时间和日期命名的特定目录,例如,假设网址是www.url.com&#39 ;,它将扫描此目录' www.url.com/date& time'。

链接不断更新,随机时间链接将被删除并用新的链接覆盖,我的目标是扫描网址下载目录,然后再扫描一个新的目录来替换旧目录并再次下载新文件。

while(numberofDownloads > 0){

        linkname = urlprint(url);//finds name of link (essentically the top half of the code in urldownload)

        if(!linknameTemp.equals(linkname)){
            numberofDownloads--;
            print("downloads left: " + numberofDownloads);
            linkname = urlprint(url);
            linknameTemp = linkname;
            urldownload(url);
        }

    }

这是我在while循环中调用的函数,当它检测到url目录中的更改时,第一次工作,然后文件在第一次下载后以0字节下载。

    private static String urldownload(String url) throws FileNotFoundException, IOException {

    Document doc = Jsoup.connect(url).get();
    Elements links = doc.select("a[href]");
    String linkname = "";

    for (Element link : links) {

        String templinkname = trim(link.text(), 35);

        if(Character.isDigit(templinkname.charAt(0))){
            linkname = trim(link.text(), 35);
        }    

        //String linkname = trim(link.text(), 35);
    }

    String urlZip = (url + linkname + "urilist.zip");//file is always named urilist.zip

    URL urldownload = new URL(urlZip);

    print(linkname);

    linkname = linkname.substring(0,linkname.length()-1); //remove last character '/' character to not confuse fileoutputstream
    ReadableByteChannel rbc = Channels.newChannel(urldownload.openStream());
    FileOutputStream fos = new FileOutputStream(linkname+".zip");//rename file after directory
    fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

    return null;
}

因此,当我运行代码时,它下载的第一个文件非常好,但是下一个文件(无论多少我重视' numberofDownloads')都下载到我的项目目录但是0字节。

如何修改代码以允许我检查目录的更新,然后在我需要的时候多次下载文件并且没有错误?

1 个答案:

答案 0 :(得分:0)

是否可以检查 ZipOutputStream 类而不是 FileOutputStream 是否可以帮助您解决一半和损坏的文件?