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

📄 frame1.java

📁 精通Java网络编程代码全部
💻 JAVA
字号:
//Frame1.java
//库声明
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import com.borland.jbcl.layout.*;
import java.beans.*;
import java.io.*;
import sun.net.TelnetInputStream;
import sun.net.ftp.*;
import java.lang.Object;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.tree.TreePath;
import sun.net.TelnetOutputStream;
import java.util.Properties;
/**
* <p>Title: this is study</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2004</p>
* @version 1.0
*/
public class Frame1 extends JFrame {
	//对象说明
		private JPanel contentPane;
	private JTextField jTextField1 = new JTextField();
	private JTextField jTextField2 = new JTextField();
	private JTextField jTextField3 = new JTextField();
	private JCheckBox jCheckbox1 = new JCheckBox();
	FtpClient ftp=null;
	JTabbedPane jTabbedPane1 = new JTabbedPane();
	JPanel jPanel1 = new JPanel();
	JPanel jPanel2 = new JPanel();
	PaneLayout paneLayout1 = new PaneLayout();
	XYLayout xYLayout1 = new XYLayout();
	JLabel jLabel1 = new JLabel();
	JLabel jLabel2 = new JLabel();
	JLabel jLabel3 = new JLabel();
	JTextField jTextField4 = new JTextField();
	JLabel jLabel4 = new JLabel();
	BorderLayout borderLayout1 = new BorderLayout();
	Box box1;
	JPanel jPanel3 = new JPanel();
	JPanel jPanel4 = new JPanel();
	XYLayout xYLayout2 = new XYLayout();
	BorderLayout borderLayout2 = new BorderLayout();
	JScrollPane jScrollPane1 = new JScrollPane();
	JButton jButton3 = new JButton();
	JButton jButton4 = new JButton();
	JScrollPane jScrollPane2 = new JScrollPane();
	//定义树节点,模型和树视图
	DefaultMutableTreeNode root1 = new DefaultMutableTreeNode("目录中没有文件");
	DefaultTreeModel model1 = new DefaultTreeModel(root1);
	JTree jTree1 = new JTree(model1);
	JButton jButton5 = new JButton();
	JLabel statusLabel = new JLabel();
	List list1 = new List();
	JScrollPane jScrollPane3 = new JScrollPane();
	JTextArea jTextArea1 = new JTextArea();
	JButton jButton1 = new JButton();
	JButton jButton2 = new JButton();
	JLabel jLabel5 = new JLabel();
	JLabel jLabel6 = new JLabel();
}
//Frame1.java
//登录程序: void jButton1_actionPerformed(ActionEvent e)
//作用:登录连接到FTP服务器。
void jButton1_actionPerformed(ActionEvent e) {
	int ch;
	String hostname=jTextField1.getText();
	//如果已经打开了FTP服务器,则先关闭FTP文件服务器
	try {
		if (ftp!=null) ftp.closeServer();
	}
	catch (IOException ex) {
		ex.printStackTrace();
	}
	//连接到服务器
	try {
		statusLabel.setText("正在连接,请等待.....");
		ftp= new FtpClient(hostname);
		//登录Ftp服务器
		ftp.login(jTextField2.getText(),jTextField3.getText());
		//使用二进制协议
		ftp.binary();
	}
	catch(FtpLoginException ex){
		//没有主机的登录权限
		statusLabel.setText("无权限与主机:"+hostname+"连接!");
	}
	catch (IOException ex){
		//连接主机失败
		statusLabel.setText("连接主机:"+hostname+"失败!");
	}
	catch(SecurityException ex)
	{
		//用户或者密码可能不对
		statusLabel.setText("用户或者密码可能不对,无权限与主机:"+hostname+"连接!");
	}
	//连接成功后的显示
	statusLabel.setText("连接主机:"+hostname+"成功!");
	//列表框需要重新刷新
	ReloadList();
//	Frame1.java
//	 浏览程序: private void ReloadList()
	作用:清空目录列表,调用List()方法获取文件列表。
	private void ReloadList(){
		StringBuffer buf=new StringBuffer();
		int ch;
		//清空目录列表
		list1.removeAll();
		try {
			//调用List()方法得到目录表
			TelnetInputStream t = ftp.list();
			t.setStickyCRLF(true);
			//分解TelnetInputStream数据流
			while ( (ch = t.read()) >= 0) {
				if (ch == '\n') {
					//向列表框添加分解得到的目录和文件
					list1.add(getDIR(buf.toString()));
					buf.setLength(0);
				}
				else {
					buf.append( (char) ch);
				}
			}
			//完成后关闭TelnetInputStream数据流
			t.close();
		}
		catch (IOException ex) {
			ex.printStackTrace();
		}
		//刷新列表框的内容
		list1.validate();
	}
//	重载,当窗口关闭后退出程序
	protected void processWindowEvent(WindowEvent e) {
		super.processWindowEvent(e);
		if (e.getID() == WindowEvent.WINDOW_CLOSING) {
			System.exit(0);
		}
	}
	浏览程序: public String getDIR(String path)
	作用:分解字符串得到目录和文件名
	public String getDIR(String path){
		String DIRName;
		int ch;
		//分解字符串得到目录和文件名
		int begin=55;
		DIRName=path.substring(begin).trim();
		return DIRName;
	}
//	Frame1.java
//	 浏览程序:void list1_mouseClicked(MouseEvent e)
//	 作用:FTP服务器文件目录改变
	void list1_mouseClicked(MouseEvent e) {
		//单击列表框的操作
		StringBuffer buf=new StringBuffer();
		if(ftp==null) list1.removeAll();
		if(list1.getRows()>0){
			//选择列表框中单击选中的内容
			String dir=list1.getSelectedItem().trim();
			try {
				//如果是目录,则进入目录
				ftp.cd(dir);
				//列表框需要重新刷新
				ReloadList();
				jTextArea1.append("进入目录: ");
				jTextArea1.append(dir);
				jTextArea1.append("\n");
			}
			catch (IOException ex) {
				//否则,表明点击的内容是ftp上的一个文件
				jTextArea1.append(dir);
				jTextArea1.append(":是一个文件\n");
			}
		}
	}
//	Frame1.java
	/ 浏览程序: void jButton5_actionPerformed(ActionEvent e)
//	 作用:选择需要的本地文件目录
	void jButton5_actionPerformed(ActionEvent e) {
		JFileChooser JFileCh = new JFileChooser();//创建文件对话框
		JFileCh.setFileSelectionMode(JFileCh.DIRECTORIES_ONLY);//只选择目录
		int returnVal = JFileCh.showOpenDialog(this);//显示文件对话框
		if(returnVal == JFileChooser.APPROVE_OPTION){
			File root2 = JFileCh.getSelectedFile();//得到根目录文件
			if(root2.isFile()) root2=root2.getParentFile();
			//如果得到的不是目录,则使用他的目录
			DefaultMutableTreeNode rootTree2 =new DefaultMutableTreeNode(root2.getPath());
			setTree(root2.getPath(),rootTree2);//遍历目录树
			model1.setRoot(rootTree2);//设置模型的根节点
			model1.reload();//重新构造树视图
		}//if 的结尾
		else
			JOptionPane.showMessageDialog(this, "没有选择文件");//显示提示信息。
	}
//	Frame1.java
//	 浏览程序: public void setTree(String Path,DefaultMutableTreeNode TreePath)
//	 作用:构造jTree对象的目录树
	public void setTree(String Path,DefaultMutableTreeNode TreePath){
		//递归遍历目录树
		try{
			File source = new File(Path);//得到源文件路径
			String[] fileName=source.list();//的到该目录下文件列表
			for(int i=0;i<fileName.length;i++){//显示选择了的文件列表
				File fileMem=new File(source.getPath(),fileName[i]);
				if(fileMem.isDirectory()){//是目录则添加目录
				DefaultMutableTreeNode TreeMem =new DefaultMutableTreeNode(fileMem.getName());
				TreePath.add(TreeMem);//在树中添加目录
				setTree(fileMem.getPath(),TreeMem);//递归遍历目录树
				}
			else{//是文件则添加节点
				DefaultMutableTreeNode TreeMem =new DefaultMutableTreeNode(fileMem.getName());
				TreePath.add(TreeMem);//添加节点
				}
			} 
		} 
		catch(Exception ei)
		{
			JOptionPane.showMessageDialog(this, "系统出错:"+ei);//显示提示信息。
		}
	}
	void JCheckbox1_propertyChange(PropertyChangeEvent e) {
		if(jCheckbox1.isSelected()){
			jTextField1.setText("anonymous");
			jTextField2.setText("a");
		}
	}
//	Frame1.java
//	 下载程序: void jButton4_actionPerformed(ActionEvent e)
//	 作用:下载ftp文件到本地目录
	void jButton4_actionPerformed(ActionEvent e) {
		//下载ftp文件到本地目录
		if(jTree1.isSelectionEmpty()){
			//如果没有选择目录和文件提示用户
			jTextArea1.append("没有选择本地目录用于下载!!\n");
		}else{
			File file1=new File(conPath());
			if(file1.isFile()){
				//如果是文件也要提示用户选择的是文件
				jTextArea1.append("没有选择本地目
	录用于下载"+jTree1.getSelectionPath().getLastPathComponent().toString()+"\n");
				jTextArea1.append("而选择的是文件:"+conPath()+"\n");
			}else{
				//下载文件到指定的目录里
				jTextArea1.append("选择的下
	载本地目录"+jTree1.getSelectionPath().getLastPathComponent().toString()+"\n");
				jTextArea1.append("目录:"+conPath()+"\n");
				//可以选择多个文件和目录
				String [] filenames=list1.getSelectedItems();
				for(int i=0;i<filenames.length;i++){
					String filename=filenames[i];
					boolean isfile=false;
					try {
						//判断是否为目录,如果是目录则在本地创建一个目录
						ftp.cd(filename);
						ftp.cdUp();
						File localDir = new File(conPath()+"\\"+filename) ;
						localDir.mkdir();
					}
					catch (IOException ex) {
						isfile=true;
					}
					if(isfile){
						//对文件的处理,即下载文件到本地硬盘中
						int ch;
						try{
							File localFile = new File(conPath()+"\\"+filename) ;
							RandomAccessFile getFile = 
	new RandomAccessFile((conPath()+"\\"+filename),"rw");
							getFile.seek(0);
							TelnetInputStream ins = ftp.get(filename);
							DataInputStream Inputs = new DataInputStream(ins);
							//下载处理......
							while ((ch = Inputs.read()) >= 0) {
								getFile.write(ch);
							}
							//处理完成,关闭输入输出流
							ins.close();
							getFile.close();
						}
						catch (IOException ex) {
							ex.printStackTrace();
						}
					}
				}
			}
		}
	}
//	Frame1.java
//	 上载程序: void jButton3_actionPerformed(ActionEvent e)
//	 作用:上载本地文件到ftp目录
	void jButton3_actionPerformed(ActionEvent e) {
		//上载本地文件到ftp服务器中
		if(jTree1.isSelectionEmpty() ){
			jTextArea1.append("没有选择本地文件上载\n");
		}else{
			File file1=new File(conPath());
			//判断是否是文件,如果是目录则不与操作,以后的程序可能会考虑添加目录的操作
			if(file1.isFile()){
				String filename=jTree1.getSelectionPath().getLastPathComponent().toString();
				int ch;
				try {
					File localFile = new File(conPath() );
					RandomAccessFile sendFile = new RandomAccessFile( conPath() , "r");
					//上载文件到ftp服务器中
					sendFile.seek(0);
					TelnetOutputStream outs = ftp.put(filename);
					DataOutputStream outputs = new DataOutputStream(outs);
					//上载处理中......
					while (sendFile.getFilePointer() < sendFile.length()) {
						ch = sendFile.read();
						outputs.write(ch);
					}
					//上载完成,关闭输入输出流
					outs.close();
					sendFile.close();
				}
				catch (IOException ex) {
					ex.printStackTrace();
				}
				//列表框需要重新刷新
				ReloadList();
			}
		}
	}
//	Frame1.java
//	 关闭程序: void jButton3_actionPerformed(ActionEvent e)
//	 作用:关闭FTP服务器连接
	void jButton2_actionPerformed(ActionEvent e) {
		try {
			//关闭FTP服务器连接
			if (ftp!=null) {
				ftp.closeServer();
				list1.removeAll();
			}
		}
		catch (IOException ex) {
			ex.printStackTrace();
		}
		statusLabel.setText("断开主机连接成功!");
	}

⌨️ 快捷键说明

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