⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadaction.java

📁 该系统是一个基于p2p的即时聊天系统
💻 JAVA
字号:
/* * @(#) DownloadAction.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.action.share.download;//导入核心Java类库import java.io.File;import java.io.IOException;import java.awt.event.ActionEvent;import java.net.MalformedURLException;import java.util.Vector;import javax.swing.JOptionPane;import javax.swing.JFileChooser;//导入自定义Java类库import hws.item.smart.Smart;import hws.item.smart.misc.XMLConfig;import hws.item.smart.misc.StringShop;import hws.item.smart.panel.function.chat.ViewPanel;import hws.item.smart.panel.function.share.DownloadPanel;import hws.item.smart.action.BaseAction;import hws.item.smart.utility.chat.FriendsInfo;//导入第三方Java类库import org.jdom.Element;import org.jdom.Document;import org.jdom.output.XMLOutputter;import org.apache.xmlrpc.XmlRpc;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcRequest;import org.apache.xmlrpc.XmlRpcException;/** * 下载选中的文件 * * @version 0.1 2005-08-30 * @author Hwerz */public class DownloadAction extends BaseAction {    /*------------------------------------------------------------------------*     *                                属性定义                                *     *------------------------------------------------------------------------*/    /**     * 该类自身的一个静态引用     */    private static DownloadAction action;    /*------------------------------------------------------------------------*     *                                构造函数                                *     *------------------------------------------------------------------------*/    /**     * 构造函数为私有,这样在整个运行过程中该类就只能有一个实例     */    private DownloadAction() {        super("下载");        setHintInfo("下载选中的文件");        setEnabled(false);    }    /*------------------------------------------------------------------------*     *                                公共方法                                *     *------------------------------------------------------------------------*/    /**     * 对该类提供的一个全局访问点,用来实例化该对象     *     * @return 该类唯一的一个实例     */    public static DownloadAction getInstance() {        if (action == null) {            action = new DownloadAction();        }        return action;    }    /*------------------------------------------------------------------------*     *                                私有方法                                *     *------------------------------------------------------------------------*/    /**     * 下载选择的文件到指定的目录下     *     * @param dir 指定的目录     */    private void download(String dir) {        try {            XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");            XmlRpcClient client = new XmlRpcClient(genURL());            client.execute(genRequest(dir));        } catch (ClassNotFoundException e) {            JOptionPane.showMessageDialog(Smart.getInstance(),                "系统找不到类库“org.apache.xerces.parsers.SAXParser”!",                StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE);        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (XmlRpcException e) {            e.printStackTrace();        } catch (IOException e) {            JOptionPane.showMessageDialog(Smart.getInstance(),                "好友不在线,文件下载失败!", StringShop.HINT_TITLE,                JOptionPane.INFORMATION_MESSAGE);        }    }    /**     * 生成请求URL     *     * @return 生成的请求URL     */    private String genURL() {        StringBuffer url = new StringBuffer();        url.append("http://");        String friendID = DownloadPanel.getInstance().getSelectedFriendID();        url.append(FriendsInfo.getFriendIP(friendID));        url.append(":");        int delta = Integer.parseInt(friendID);        url.append(XMLConfig.getRequestPort() + delta);        url.append("/");        return url.toString();    }    /**     * 生成XML-RPC请求消息     *     * @return 生成的XML-RPC请求消息     * @param dir 指定的目录     */    private XmlRpcRequest genRequest(String dir) {        //请求方法        StringBuffer method = new StringBuffer();        method.append(XMLConfig.getRequestClass());        method.append(".");        method.append(XMLConfig.getRequestMethod());        //请求参数        Vector params = new Vector();        XMLOutputter outputter = new XMLOutputter();        params.addElement(outputter.outputString(genDocument(dir)));        return new XmlRpcRequest(method.toString(), params);    }    /**     * 生成XML文档     *     * @return 生成的XML文档     * @param dir 指定的目录     */    private Document genDocument(String dir) {        Element request = new Element("Request");        Element r = new Element("Requester");        r.setAttribute("id", ViewPanel.getInstance().getUserID());        r.setAttribute("dir", dir);        r.setAttribute("file", DownloadPanel.getInstance().getSelectedFile());        request.addContent(r);        return new Document(request);    }    /*------------------------------------------------------------------------*     *                                覆盖方法                                *     *------------------------------------------------------------------------*/    /**     * 覆盖超类Action的方法     *     * @param event ActionEvent对象     */    public void actionPerformed(ActionEvent event) {        boolean flag = true;        do {            JFileChooser chooser = new JFileChooser();            chooser.setDialogTitle("选择文件保存的目录");            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);            int option = chooser.showSaveDialog(Smart.getInstance());            if (option == JFileChooser.APPROVE_OPTION) {                File file = chooser.getSelectedFile();                if (file.exists() && file.isDirectory()) {                    download(file.getAbsolutePath());                    setEnabled(false);                    flag = false;                } else {                    int option2 = JOptionPane.showConfirmDialog(                        Smart.getInstance(), "您选择的目录不合法,要继续吗?",                        StringShop.HINT_TITLE, JOptionPane.YES_NO_OPTION,                        JOptionPane.QUESTION_MESSAGE);                    if (option2 == JOptionPane.NO_OPTION) {                        flag = false;                    }                }            } else {                flag = false;            }        } while (flag);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -