使用Java访问Web命令行arg?

时间:2010-09-16 02:55:40

标签: java xml

我编写了一个程序,它读入一个File对象(实际上是一个XML文件)来解析我想要的信息。我有一个示例程序,基本上只是从网络转储数据(下面显示一个网页的程序)。我想在访问Web时使用以下代码,使用命令行使用当前的xml解析器解析该数据。就像我做的那样

java xmlParser http://www.engadget.com/rss.xml

然后程序将解析该feed并以漂亮的格式显示我想要的字段。首先,那是否有点可笑?我只是通过命令行打开网页而不是下面的内容。

其次,如何从网络中获取此Feed并使我的程序解析它,因为它当前只解析硬编码的XML文件。虽然不是一个优雅的解决方案,但我可以看到可能将数据从Web写入xml文件并使用我的XML解析器解析它。有什么想法吗?感谢。

代码:

 import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;

public class DumpIO {
    public static void main(String[] args) throws IOException {
        URL url = null;
        if (args.length == 0) 
            url = new URL("http://www.engadget.com/rss.xml");
        InputStream is = url.openStream();
        Scanner in = new Scanner(is);
        while (in.hasNextLine()) {
            System.out.println(in.nextLine());
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您在没有命令行参数的情况下运行它,程序运行正常:

jkugelman$ java DumpIO
<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
>
<channel>
...

唯一的问题是,您只需创建URL args.length == 0。如果您在命令行上传递了网址,则url最终会成为null

jkugelman$ java DumpIO http://example.com/
Exception in thread "main" java.lang.NullPointerException
    at DumpIO.main(DumpIO.java:11)

修复很容易:

if (args.length > 0) {
    url = new URL(args[0]);
}
else {
    url = new URL("http://www.engadget.com/rss.xml");
}

关于第二个问题,您的XML解析器很可能接受InputStream作为输入。从InputStream获取url.openStream()并将其传递给XML阅读器并发送。无需保存到临时文件或类似的任何环形。

答案 1 :(得分:0)

您可以在Scala中尝试相同的操作。这是整个计划:

object DumpIO {
  def main(a: Array[String]) = {
    val url = if (a.size > 0) a(0) else "http://www.engadget.com/rss.xml"
    val rss = xml.XML.load(url)
    println(rss)
  }
}

Scala具有出色的原生XML支持,因此您可以继续使用值'rss'来执行xpath操作,漂亮打印等。

您的Scala程序将编译为标准.class文件,因此您可以根据需要使用java命令运行它。