如何将URL中的xml数据保存到文件中?

时间:2016-03-02 04:45:09

标签: java xml

我想做的是获取此网址的内容:

https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=CYQB&hoursBeforeNow=2

并将其复制到一个文件中,以便我可以解析它并使用这些元素。

这是我到目前为止所做的:

package test;

import java.io.*;
import java.net.*;

import org.apache.commons.io.FileUtils;

public class JavaGetUrl {

@SuppressWarnings("deprecation")
public static void main(String[] args) throws FileNotFoundException {

    URL u;
    InputStream is = null;
    DataInputStream dis;
    String s = null;

    try {

        u = new URL(
                "https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=CYQB&hoursBeforeNow=2");

        is = u.openStream(); // throws an IOException

        dis = new DataInputStream(new BufferedInputStream(is));

        while ((s = dis.readLine()) != null) {
            System.out.println(s);
            FileUtils.writeStringToFile(new File("input.txt"), s);
        }

    } catch (MalformedURLException mue) {

        System.out.println("Ouch - a MalformedURLException happened.");
        mue.printStackTrace();
        System.exit(1);

    } catch (IOException ioe) {

        System.out.println("Oops- an IOException happened.");
        ioe.printStackTrace();
        System.exit(1);

    } finally {

        try {
            is.close();
        } catch (IOException ioe) {

        }

    }

}
}

问题是s的内容没有出现在input.txt。

如果我用任何其他字符串替换s,它的工作原理。所以我猜这是s的数据有问题。是因为它是xml吗?

谢谢大家的帮助。

2 个答案:

答案 0 :(得分:3)

该文件可能已被覆盖。

您应该使用“append”mode来获取附加数据的文件(来自readLine)。

public static void writeStringToFile(File file,
                                String data,
                                boolean append)

答案 1 :(得分:0)

因为您已经在使用apaches commons-io,所以您也可以使用

FileUtils.copyURLToFile(URL, File)

请参阅https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL,%20java.io.File)