基於java(javafx)的軟件更新

背景:用javaFx開發的C/S程序,客戶端須要更新,須要寫個程序,若是有新版本須要提示用戶更新。java

需求:若是有新版本,提示客戶須要更新,客戶根據提示,進入到更新頁面,能夠下載最新客戶端(jnlp文件)。最新的客戶端將下載到C:\\f1(硬性規定,不讓客戶選擇)目錄下,並生成一個批處理文件(bat)並在桌面建立這個批處理文件的快捷方式,客戶直接執行這個批處理文件即進行更新.
服務器

解決辦法:ui

    有新版本提示客戶更新比較好實現。每次發佈版本都會生成一個版本號,客戶每次登陸客戶端,客戶端往服務器端發送版本號,若是和服務器端存儲的版本號一致,則沒有要更新的版本,反之則提示客戶須要更新。至於怎麼推送消息,取決於各位。樓主用的是jms.this

    java下載也是你們常常用的,不贅述。生成bat文件也下載也同樣,就是IO流的操做。有些人可能腳本文件可能不太會寫,其實很簡單,網上一搜,不少都是現成的。並且就是和在dos命令同樣。難點在於建立這個bat文件的快捷方式。藉助於第三方jar包和一個dll文件。jshortcut.dll,jshortcut.jar。jshortcut.dll文件須要放到和src同一級目錄上。spa

    好了,很少說,下面貼代碼,註釋寫的都比較清楚。
code

    

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
orm

相關文章
相關標籤/搜索