基于java(javafx)的软件更新

背景:用javaFx开发的C/S程序,客户端需要更新,需要写个程序,如果有新版本需要提示用户更新。

需求:如果有新版本,提示客户需要更新,客户根据提示,进入到更新页面,可以下载最新客户端(jnlp文件)。最新的客户端将下载到C:\\f1(硬性规定,不让客户选择)目录下,并生成一个批处理文件(bat)并在桌面创建这个批处理文件的快捷方式,客户直接执行这个批处理文件即进行更新.

解决办法:

    有新版本提示客户更新比较好实现。每次发布版本都会生成一个版本号,客户每次登录客户端,客户端往服务器端发送版本号,如果和服务器端存储的版本号一致,则没有要更新的版本,反之则提示客户需要更新。至于怎么推送消息,取决于各位。楼主用的是jms.

    java下载也是大家经常用的,不赘述。生成bat文件也下载也一样,就是IO流的操作。有些人可能脚本文件可能不太会写,其实很简单,网上一搜,很多都是现成的。而且就是和在dos命令一样。难点在于创建这个bat文件的快捷方式。借助于第三方jar包和一个dll文件。jshortcut.dll,jshortcut.jar。jshortcut.dll文件需要放到和src同一级目录上。

    好了,不多说,下面贴代码,注释写的都比较清楚。

    

package com.platform.ui.update;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.filechooser.FileSystemView;

import net.jimmc.jshortcut.JShellLink;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;

public class DownloadFileController extends AnchorPane {
	@FXML
	private Button download;

	@FXML
	void downloadFile() {

		// 获取资源路径
		String tempResourcePath = this.getClass().getClassLoader()
				.getResource("").getPath();
		String resourcePath = tempResourcePath.substring(1,
				tempResourcePath.indexOf("classes"))
				+ "resource";

		String targetPath = "C:\\f1";

		File targetFile = new File(targetPath);
		if (!targetFile.exists()) {
			targetFile.mkdirs();
		}

		File[] files = new File(resourcePath).listFiles();

		for (File file : files) {
			// File resourceFile = new File(resourcePath);

			// 以流的形式下载文件。
			InputStream fis;
			try {
				fis = new BufferedInputStream(new FileInputStream(
						file.getAbsolutePath()));
				byte[] buffer = new byte[fis.available()];
				fis.read(buffer);
				fis.close();
				FileOutputStream out = new FileOutputStream(targetFile + "\\"
						+ file.getName());
				out.write(buffer);
				out.flush();
				out.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		// 创建写入的目标文件
		String batPath = "C:\\f1\\run.bat";
		File file = new File(batPath);
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 写出流
		BufferedWriter output;
		try {
			output = new BufferedWriter(new FileWriter(file));
			output.write("cd C:\\f1");
			output.write("\r\n");
			output.write("javaws yk_platform_client.jnlp");
			output.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		// 在桌面创建run.bat快捷方式
		FileSystemView fsv = FileSystemView.getFileSystemView();
		String writeFolderPath = fsv.getHomeDirectory().toString() + "\\"; // 这便是读取桌面路径的方法了
		String jarFileName = "C:\\f1\\run.bat";// 建立快捷方式后鼠标放到上面的时候现实的文件所存位置
		// create lnk file
		JShellLink link = new JShellLink();
		link.setFolder(writeFolderPath); // 创建的快捷方式所存在的位置,路径要真实路径,放到快速启动栏里面
		link.setName("豪诺ERP更新文件"); // 快捷方式的名称
		link.setIconLocation("C:\\f1\\erp.ico");// 图片位置
		link.setPath(jarFileName);
		link.setArguments("");// 设置执行参数
		link.save();

		System.out.println("执行完毕!");
	}

}

        有什么需要指正或者不明白的地方,欢迎交流。QQ:70747053

你可能感兴趣的:(java下载,软件更新,java创建快捷方式)