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

📄 main.java

📁 该多线程下载工具功能强大
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					df.b2.setEnabled(false);
					String str = df.t1.getText();
					String[] s = str.split("/");
					int i = s.length;
					df.t3.setText(s[i - 1]);
				} else {
					df.b2.setEnabled(true);
					String str = df.t1.getText();
					String[] s = str.split("/");
					int i = s.length;
					df.t3.setText(s[i - 1]);
				}
			}

			public void mouseEntered(MouseEvent e) {
			}

			// 单击鼠标的时候,如果文本框里为提示的文字,则清空文本框
			public void mouseClicked(MouseEvent e) {

			}
		});
		df.t2.addMouseListener(new MouseListener() {
			public void mouseReleased(MouseEvent e) {
			}

			public void mousePressed(MouseEvent e) {
			}

			// 当鼠标移出时,如果文本框为空,则让删除按钮不可用
			public void mouseExited(MouseEvent e) {
				if (df.t1.getText().equals("") || df.t2.getText().equals("")) {
					df.b2.setEnabled(false);
				} else {
					df.b2.setEnabled(true);

				}
			}

			public void mouseEntered(MouseEvent e) {
			}

			// 单击鼠标的时候,如果文本框里为提示的文字,则清空文本框
			public void mouseClicked(MouseEvent e) {

			}
		});

		/*
		 * 
		 * @对各个组件进行装载及布局的设置
		 * 
		 */
		addPanel.add(newButton);
		addPanel.add(L3);
		addPanel.add(clearButton);
		addPanel.add(L4);
		addPanel.add(delete);
		p1.add(buttonsPanel, BorderLayout.CENTER);
		p1.add(addPanel, BorderLayout.SOUTH);
		p1.setBorder(border1);

		this.setLayout(new BorderLayout());
		this.add(downloadsPanel, BorderLayout.CENTER);
		this.add(p1, BorderLayout.SOUTH);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(600, 300);
		this.setLocation(300, 300);

		/*
		 * @对断点续传功能的实现
		 */

		// 对指定路径进行搜索扩展名为“properties”的文件
		File filepath = new File("e:\\");
		String[] s = filepath.list(new FilenameFilter() {
			public boolean accept(File dir, String name) {
				if (name.endsWith(".properties")) {
					return true;
				} else {
					return false;
				}
			}
		});

		String tmp[] = new String[s.length];
		String filename[] = new String[s.length];
		for (int i = 0; i < s.length; i++) {
			// 除去扩展名
			tmp = s[i].split("\\.");
			filename[i] = tmp[0];

		}

		// 判断是否存在“properties”文件
		if (filename != null) {
			for (int i = 0; i < filename.length; i++) {

				// 如果文件存在则对各个属性进行读取

				fileName = filename[i];

				File f = new File("e:\\" + fileName + ".properties");
				// 读取文件的大小
				long fa = f.length();
				if (fa > 0) {

					// 读取网络地址
					verifiedUrl = op.readValue(fileName + ".properties",
							"verifiedUrl");
					// 读取保存文件保存路径
					saveURL = op.readValue(fileName + ".properties", "saveURL");
					// 读取文件已下载总量
					downloaded = Integer.valueOf(op.readValue(fileName
							+ ".properties", "downloaded"));
					// 读取文件大小
					size = Integer.valueOf(op.readValue(fileName
							+ ".properties", "fileLength"));
					// 读取文件的下载状态
					status = Integer.valueOf(op.readValue(fileName
							+ ".properties", "status"));
					// 读取下载文件时的线程数
					nTread = Integer.valueOf(op.readValue(fileName
							+ ".properties", "nthread"));
					// 读取已下载文件所用的时间
					second = Integer.valueOf(op.readValue(fileName
							+ ".properties", "second")) - 1;
					a = new int[nTread];
					// 读取各个线程的下载量
					for (int n = 0; n < nTread; n++) {
						a[n] = Integer.valueOf(op.readValue(fileName
								+ ".properties", "" + (n + 1)));
					}
					pathname.add(saveURL);
					// 添加下载任务
					actionAdd();
				}
			}
		}
	}

	/*
	 * @方法体
	 */

	// 添加下载任务方法
	private void actionAdd() {
	

		// 对下载文件和保存文件完整地址进行检查
		if (saveURL.compareTo("") == 0 && verifiedUrl.compareTo("") == 0) {
			JOptionPane.showMessageDialog(this, "请输入要下载的文件和保存文件完整地址",
					"远程(或本地)地址错误", JOptionPane.ERROR_MESSAGE);
		}

		else {
			// 对网络地址进行检查
			if (!verifyUrl(verifiedUrl)) {
				JOptionPane.showMessageDialog(this,
						"请输入正确的远程(和本地)地址(如:http://192.168.20.99;)",
						"远程(或本地)地址错误", JOptionPane.ERROR_MESSAGE);
			} else {
				try {
					tableModel.addDownload(new DownLoadFile(verifiedUrl,
							saveURL, nTread, downloaded, size, status, a,
							second));
				} catch (Exception ex) {
					ex.printStackTrace();
				}

			}
		}

	}

	// 对网络地址进行判断
	private boolean verifyUrl(String url) {
		if (!url.toLowerCase().startsWith("http://"))
			return false;

		URL verifiedUrl = null;
		try {
			verifiedUrl = new URL(url);
		} catch (Exception e) {
			return false;
		}

		if (verifiedUrl.getFile().length() < 2)
			return false;

		return true;
	}

	private void tableSelectionChanged() {
		if (selectedDownload != null)
			selectedDownload.deleteObserver(Main.this);
		if (!clearing) {
			selectedDownload = tableModel.getDownload(table.getSelectedRow());
			selectedDownload.addObserver(Main.this);
			updateButtons();
		}
	}

	// 对文件删除方法
	private void actionDelete() {

		String path = (String) pathname.get(table.getSelectedRow());
		File f = new File(path);
		f.delete();

		updateButtons();

	}

	// 暂停方法
	private void actionPause() {
		selectedDownload.pause();
		updateButtons();
	}

	// 断点后重新开始
	private void actionResume() {
		selectedDownload.resume();
		updateButtons();
	}

	// 删除任务方法
	private void actionClear() {
		clearing = true;

		tableModel.clearDownload(table.getSelectedRow());

		clearing = false;
		selectedDownload = null;
		updateButtons();
	}

	// 设置按钮是否可用
	private void updateButtons() {
		if (selectedDownload != null) {
			int status = selectedDownload.getStatus();
			// 利用switch,和下载状态设置按钮是不否可用
			switch (status) {
			case DownLoadFile.DOWNLOADING:
				pauseButton.setEnabled(true);
				resumeButton.setEnabled(false);
				delete.setEnabled(false);
				clearButton.setEnabled(false);
				break;
			case DownLoadFile.PAUSED:
				pauseButton.setEnabled(false);
				resumeButton.setEnabled(true);
				delete.setEnabled(true);
				clearButton.setEnabled(true);
				break;
			case DownLoadFile.ERROR:
				pauseButton.setEnabled(false);
				resumeButton.setEnabled(true);
				delete.setEnabled(true);
				clearButton.setEnabled(true);
				break;
			default:
				pauseButton.setEnabled(false);
				resumeButton.setEnabled(false);
				delete.setEnabled(true);
				clearButton.setEnabled(true);
			}
		} else {
			pauseButton.setEnabled(false);
			resumeButton.setEnabled(false);
			clearButton.setEnabled(false);
			delete.setEnabled(false);
		}
	}

	public void update(Observable o, Object arg) {
		if (selectedDownload != null && selectedDownload.equals(o))
			updateButtons();
	}

	// Main方法
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				try {
					/** 通过皮肤类,包装窗体组件——通过liquidlnf.jar */
					UIManager
							.setLookAndFeel(new com.birosoft.liquid.LiquidLookAndFeel());

				} catch (Exception exception) {
					exception.printStackTrace();
				}
				/** 通过java的swing包,美化边框 */
				javax.swing.JFrame.setDefaultLookAndFeelDecorated(true);

				Main manager = new Main();
				manager.setVisible(true);
			}
		});

	}
}

⌨️ 快捷键说明

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