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

📄 frame.java

📁 一个用JAVA写的FTP客户端 解压后可以运行 测试通过
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}

	// ---------------------------------------------------------------------------
	// 浏览程序: public String getDIR(String path)
	// 作用:分解字符串得到目录和文件名

	public String getDIR(String path) {
		String DIRName;
		int ch;
		// 分解字符串得到目录和文件名
		int begin = 55;
		DIRName = path.substring(begin).trim();
		return DIRName;
	}

	// ---------------------------------------------------------------------------
	// 浏览程序: 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);// 递归遍历目录树
				}// end if
				else {// 是文件则添加节点
					DefaultMutableTreeNode TreeMem = new DefaultMutableTreeNode(
							fileMem.getName());
					TreePath.add(TreeMem);// 添加节点
				}
			}// end for
		}// End try
		catch (Exception ei) {
			JOptionPane.showMessageDialog(this, "系统出错:" + ei);// 显示提示信息。
		}
	}

	void JCheckbox1_propertyChange(PropertyChangeEvent e) {
		if (jCheckbox1.isSelected()) {
			jTextField1.setText("anonymous");
			jTextField2.setText("a");
		}
	}

	// ---------------------------------------------------------------------------
	// 浏览程序: 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();// 重新构造树视图
		}// end if
		else
			JOptionPane.showMessageDialog(this, "没有选择文件");// 显示提示信息。
	}

	// ---------------------------------------------------------------------------
	// 浏览程序: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");
			}
		}
	}

	// ---------------------------------------------------------------------------
	// 登录程序: 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();
	}

	// ---------------------------------------------------------------------------
	// 关闭程序: 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("断开主机连接成功!");
	}

	// ---------------------------------------------------------------------------
	// 上载程序: 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();
			}
		}
	}

	// ---------------------------------------------------------------------------
	// 下载程序: 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();
						}
					}
				}
			}
		}
	}

	// ---------------------------------------------------------------------------
	// 浏览程序: String conPath( )
	// 作用:用于获取本地目录树中的文件路径

	String conPath() {
		// 用于获取本地目录树中的文件路径
		TreePath treePath1 = jTree1.getSelectionPath();
		String dir1, dir = treePath1.getPathComponent(0).toString();
		int i, count = treePath1.getPathCount();
		// 对于象“c:\”之类的盘符路径需要特殊处理
		if ((dir.length()) == 3)
			dir1 = dir.substring(0, 2);
		else
			dir1 = dir;
		for (i = 1; i < count; i++) {
			dir1 = dir1 + "\\" + treePath1.getPathComponent(i);
		}
		return dir1;
	}

}

⌨️ 快捷键说明

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