使用java从网站下载文件

时间:2015-05-17 05:05:54

标签: java

我是Java新手,我目前正在尝试创建一个Java应用程序来从网站下载文件。要进入该网站,您需要一个密码和用户名。我使用NativeSwing输入并获取文件的路径,但我不知道如何下载它们。

public class Test {
public JFrame frame;
private static JWebBrowser browser;

private static JPanel configurationButtonPanel; 

public Test() {
    frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(createContent(), BorderLayout.CENTER);
    frame.setSize(800, 800);
    frame.setLocationByPlatform(true);
    frame.setVisible(true);
}

public JComponent createContent() {

    JPanel contentPane = new JPanel(new BorderLayout());
    JPanel configurationPanel = new JPanel(new BorderLayout());
    configurationButtonPanel = new JPanel(new FlowLayout(
            FlowLayout.CENTER, 0, 0));
    JButton beginButton = new JButton("Download");
    beginButton.addActionListener(new ActionListener() {



 public void actionPerformed(ActionEvent e) {
            ArrayList<String> ligas = new ArrayList<String>();
            int a=0;
            Document doc = Jsoup.parse(browser.getHTMLContent());
            Element ele = doc.getElementById("ctl00_MainContent_PnlResultados");
            System.setProperty("java.net.useSystemProxies", "true");

        try{
            Elements img_2 = ele.getElementsByClass("BtnDescarga");
            for (Element el : img_2) {



                for( Attribute attribute : el.attributes() )
                {

                    if( attribute.getKey().equalsIgnoreCase("onclick") )
                    {

                       ligas.add("https://portalcfdi.facturaelectronica.sat.gob.mx/"+attribute.getValue().substring(19,535));

                    }
                }

            }
        }
        catch(NullPointerException nulo){

        }


            for( int i = 0 ; i < ligas.size() ; i++ ){
                  System.out.println( ligas.get( i ) );

            }

        }

    });


    browser = new JWebBrowser();
    browser.navigate("https://portalcfdi.facturaelectronica.sat.gob.mx/");
    configurationButtonPanel.add(beginButton);
    configurationButtonPanel.setVisible(true);
    configurationPanel.add(configurationButtonPanel, BorderLayout.NORTH);
    contentPane.add(configurationPanel, BorderLayout.SOUTH);
    contentPane.add(browser, BorderLayout.CENTER);
    return contentPane;
}
/**
 * @param args
 */
public static void main(String[] args) {
    NativeInterface.open();
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {

            new Test();


        }
    });
    NativeInterface.runEventPump();

}

}

运行此部分时:

for( int i = 0 ; i < ligas.size() ; i++ ) {
    System.out.println( ligas.get( i ) );
}

我收到以下网址:

https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi.aspx?Datos=huswUYX1eXMlGkDiItMUBgaWREHHqhXOWtYxqyUh0oUZnCKLYE/gx6ENJ+0TwW5auWw8d/AiCJyuFSDNVY+5l0vkiELroo/fEmF+x5w+DQDDTfMX9qIINS1NgP9C1bFhirjcVXpZI1ed4ycpLPczkYMEGEKvqWemni8LWcbqC0BuZskOJnCQCaWRh1Kt7AL5GdBVKqkm3T5mvzhtkmE5dn0vcWbCFFO3d3G8hu7rlcc0XM+7+6iR52SZYYaHa/TOhcl2DjuzztADpa9tPxZ9VO6EzMVkYKTfDOqHwZO8m2U9BZ7UhFjqsyoAwsQneqhIqGwN21yEpGEcptsTb9uZ1t0Fc/1Ggd6SuK9NeGdBpiawn6cv6QM1uc4QQHMNpAgG89Rq5tOd4YAoRQHBe/vO8ppq60JwvJgQ4BN76EtZF0UtEWK+k57P01vatuvTHIdMBncbXyU+TrtE5AlhdGKkY2a8HwSxHw3nfoQ+SLBrjyg=

3 个答案:

答案 0 :(得分:0)

我使用以下代码从url读取图像,我想你可以在这里使用相同的技术

 try{
        URL url = new URL("YOUR_URL_TO_READ");
        InputStream is = url.openStream();
        OutputStream os = new FileOutputStream("YOUR_FILE_TO_SAVE");

        byte[] b = new byte[4096];
        int length;

        while ((length = is.read(b)) != -1) {
            os.write(b, 0, length);
        }

        is.close();
        os.close();

        }catch(Exception exp){
            exp.printStackTrace(); 

        }

答案 1 :(得分:0)

现在最好的答案是Apache Http Client。 Java内置了HttpURLConnection,但它很难使用,并且还有其他一些可能会让你烦恼的使用问题(例如保持活动和错误)。如果您绝对不能包含第三方,请使用HttpURLConnection,否则请使用Apache Library。

JDK 9 here中有一个新的Java标准Http库,但是还没有。

答案 2 :(得分:0)

您可能必须在类似的线路上尝试代码..可能会有效...可能有两个问题......首先,您需要在您的机器上找到代理名称和端口设置...如果有代理..接下来,站点可能需要身份验证,因此您需要设置正确的用户名和密码。

Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(&#34; Your Proxy&#34;,ProxyPort));

ConstraintValidator