Java URL问题

时间:2011-08-05 13:48:39

标签: java url exe

网页包含指向可执行文件的链接(例如,如果我们点击该链接,浏览器将在您的本地计算机上下载该文件。)

有没有办法用Java实现相同的功能?

谢谢

3 个答案:

答案 0 :(得分:1)

您可以使用Java的URL类来下载文件,但这需要一些工作。您需要执行以下操作:

  1. 在文件
  2. 处创建URL对象点
  3. 致电openStream()以获取InputStream
  4. 打开要写入的文件(FileOutputStream
  5. InputStream读取并写入文件,直到没有剩余数据可供阅读
  6. 关闭输入和输出流
  7. 您正在下载的文件的类型并不重要(事实上它是一个可执行文件无关紧要),因为对于任何类型的文件,该过程都是相同的。

    更新:听起来您真正想要的是将网页的网址插入Java应用,并让Java应用找到页面中的链接,然后下载该链接。如果是这种情况,你的问题的措辞是非常不清楚的,但这是我将使用的基本步骤:

    1. 首先,使用上面的步骤1和2获取页面的InputStream
    2. 使用TagSoupjsoup之类的内容来解析HTML
    3. 找到您想要的<a>元素并提取其href属性以获取您需要下载的文件的URL(如果它是相对URL而不是绝对URL,则需要解决该问题针对原始网址的网址)
    4. 使用上述步骤下载该网址
    5. 这是一个轻微的快捷方式,基于jsoup(我以前从未使用过,我只是从他们网页上窃取的片段中写出来的)。我遗漏了很多错误检查,但是嘿,我通常会对此收费:

      Document doc = Jsoup.connect(pageUrl).get();
      Element aElement = doc.getElementsByTag("a").first() // Obviously you may need to refine this
      String newUrl = aElement.attr("abs:href"); // This is a piece of jsoup magic that ensures that the destination URL is absolute
      // assert newUrl != null
      URL fileUrl = new URL(newUrl);
      String destPath = fileUrl.getPath();
      int lastSlash = destPath.lastIndexOf('/');
      if (lastSlash != -1) {
          destPath = destPath.substring(lastSlash);
      }
      // Assert that this is really a valid filename
      // Now just download fileUrl and save it to destPath
      

      正确的方式来确定目标文件名应该是什么(除非您对其进行硬编码)实际上是查找Content-Disposition标头,并查找{{1}之后的位}。在这种情况下,您无法在网址上使用filename=,而是需要使用openStream()来获取URLConnection。然后,您可以使用openConnection()getInputStream()InputStream获取标题来确定您的文件名。如果标题丢失或格式错误,您应该回退到使用上面的方法来确定目标文件名。

答案 1 :(得分:1)

是的。 这是一个简单的例子:

您可以拥有一个JSF(Java Server Faces)页面,其中包含一个支持带有@PostConstruct注释方法的支持bean。这意味着在创建页面时将发生任何操作(例如下载)。

已经存在一个非常相似的问题,请查看:Invoke JSF managed bean action on page load

答案 2 :(得分:0)

您可以使用apache commons IO FileUtils

执行此操作

http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL,java.io.File)

修改

我能够从source forge网站成功下载一个zip文件(它不是空的),它做了这样的事情

import java.io.File;
import java.net.URL;

import org.apache.commons.io.FileUtils; 
public class Test 
{

 public static void main(String args[])
 {

    try {
        URL url = new URL("http://sourceforge.net/projects/gallery/files/gallery3/3.0.2/gallery-3.0.2.zip/download");
        FileUtils.copyURLToFile(url, new File("test.zip"));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   }
 }

我也能成功下载tomcat.exe

网址网址=新网址(“http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.exe”);