1. 程式人生 > >Java對CSV檔案加密後匯入匯出功能小結

Java對CSV檔案加密後匯入匯出功能小結

技術總結

本次做CSV檔案的加密後的匯入匯出功能,遇到的問題。在這裡做個總結,以備不時之需。

1.      加密

加密採用的是DES加密,整個加密類貼出來。

package com.lddsm.util;

import java.io.FileInputStream; 

import java.io.FileOutputStream; 

import java.io.InputStream; 

import java.io.OutputStream; 

import java.security.Key; 

import java.security.SecureRandom; 

import

javax.crypto.Cipher

import javax.crypto.CipherInputStream; 

import javax.crypto.CipherOutputStream; 

import javax.crypto.KeyGenerator;

public classEncryptUtil {

   Keykey;  

   public EncryptUtil(Stringstr) {  

      getKey(str);//生成密匙

   }  

   /** 

    * 根據引數生成KEY 

    */  

   public void

getKey(String strKey) {  

      try {  

         KeyGenerator_generator= KeyGenerator.getInstance("DES");  

         _generator.init(new SecureRandom(strKey.getBytes()));  

         this.key =_generator.generateKey();  

         _generator = null;  

      }catch(Exceptione) {  

         throw new

RuntimeException("Error initializing SqlMap class. Cause: " +e);  

      }  

   }  

   /** 

    * 檔案file進行加密並儲存目標檔案destFile

    * 

    * @param file  要加密的檔案c:/test/srcFile.txt 

    * @param destFile加密後存放的檔名c:/加密後文件.txt 

    */  

   public void encrypt(String file, StringdestFile) throws Exception {  

      Cipher cipher = Cipher.getInstance("DES");  

      // cipher.init(Cipher.ENCRYPT_MODE, getKey());  

      cipher.init(Cipher.ENCRYPT_MODE,this.key);  

      InputStreamis = new FileInputStream(file);  

      OutputStreamout= newFileOutputStream(destFile);  

      CipherInputStreamcis= newCipherInputStream(is,cipher);  

      byte[] buffer = new byte[1024];  

      int r;  

      while ((r =cis.read(buffer)) > 0) {  

         out.write(buffer, 0,r);  

      }  

      cis.close();  

      is.close();  

      out.close();  

   }  

   /** 

    * 檔案採用DES演算法解密檔案

    * 

    * @param file已加密的檔案c:/加密後文件.txt 

    *        * @param destFile 

    *        解密後存放的檔名c:/ test/解密後文件.txt 

    */  

   public void decrypt(String file, Stringdest) throws Exception {  

      Cipher cipher = Cipher.getInstance("DES");  

      cipher.init(Cipher.DECRYPT_MODE,this.key);  

      InputStreamis = new FileInputStream(file);  

      OutputStreamout= newFileOutputStream(dest);  

      CipherOutputStreamcos= newCipherOutputStream(out,cipher);  

      byte[] buffer = new byte[1024];  

      int r;  

      while ((r =is.read(buffer)) >= 0) {  

         System.out.println(); 

         cos.write(buffer, 0,r);  

      }  

      cos.close();  

      out.close();  

      is.close();  

   }  

   /**

    * 建立普通檔案

    * @param is輸入流

    * @param destFile建立後的路徑

    * @throws Exception

    */

   public static void createFile(InputStreamis, String destFile)throws Exception {  

      OutputStreamout= newFileOutputStream(destFile);  

      byte[] buffer = new byte[1024];  

      int r;  

      while ((r =is.read(buffer)) > 0) {  

         out.write(buffer, 0,r);  

      }  

      is.close();  

      out.close();  

   } 

   public static void main(String[] args) throws Exception {

      InputStreaminputStream= newFileInputStream("c:/aaa.txt");

      createFile(inputStream,"c:/bbb.txt");

//    EncryptUtiltd = new EncryptUtil("aaa");  

//    td.encrypt("c:/srctest.txt","c:/srctest解密.txt");//加密

//    td.decrypt("c:/srctest解密.txt", "c:/r1.txt"); //解密

   }

}

2

2.      匯入匯出CSV

3. public staticList<String> importCsv(MultipartFile file){

4.          List<String> dataList=newArrayList<String>();

5.          

6.          BufferedReader br=null;

7.          try {

8.              //br = new BufferedReader(new FileReader(file));

9.              br=new BufferedReader(new InputStreamReader(file.getInputStream(),"GBK"));

10.               String line ="";

11.               while ((line =br.readLine()) != null) {

12.                   dataList.add(line);

13.               }

14.           }catch (Exceptione) {

15.           }finally{

16.               if(br!=null){

17.                   try {

18.                       br.close();

19.                       br=null;

20.                   } catch (IOExceptione) {

21.                       e.printStackTrace();

22.                   }

23.               }

24.           }

25.    

26.           returndataList;

27.       }

28.       /**

29.     * 匯出

30.     *

31.     * @param filecsv檔案(路徑+檔名)csv檔案不存在會自動建立

32.     * @param dataList資料

33.     * @return

34.     */

35.    public static boolean exportCsv(File file, List<String> dataList){

36.        booleanisSucess=false;

37.        

38.        FileOutputStream out=null;

39.        OutputStreamWriter osw=null;

40.        BufferedWriter bw=null;

41.        try {

42.            out = new FileOutputStream(file);

43.            osw = new OutputStreamWriter(out);

44.            bw =new BufferedWriter(osw);

45.            if(dataList!=null&& !dataList.isEmpty()){

46.                for(Stringdata : dataList){

47.                    bw.append(data).append("\r");

48.                }

49.            }

50.            isSucess=true;

51.        } catch (Exceptione) {

52.            isSucess=false;

53.        }finally{

54.            if(bw!=null){

55.                try {

56.                    bw.close();

57.                    bw=null;

58.                } catch (IOExceptione) {

59.                    e.printStackTrace();

60.                }

61.            }

62.            if(osw!=null){

63.                try {

64.                    osw.close();

65.                    osw=null;

66.                } catch (IOExceptione) {

67.                    e.printStackTrace();

68.                }

69.            }

70.            if(out!=null){

71.                try {

72.                    out.close();

73.                    out=null;

74.                } catch (IOExceptione) {

75.                    e.printStackTrace();

76.                }

77.            }

78.        }

79.        

80.        returnisSucess;

81.    }

82.    

83.    /**

84.     * 匯入

85.     *

86.     * @param filecsv檔案(路徑+檔案)

87.     * @return

88.     */

89.    public static List<String> importCsv(File file){

90.        List<String> dataList=newArrayList<String>();

91.        

92.        BufferedReader br=null;

93.        try {

94.            //br = new BufferedReader(new FileReader(file));

95.            br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));

96.            String line = "";

97.            while ((line =br.readLine()) != null) {

98.                dataList.add(line);

99.            }

100.           }catch (Exceptione) {

101.           }finally{

102.               if(br!=null){

103.                   try {

104.                       br.close();

105.                       br=null;

106.                   } catch (IOExceptione) {

107.                       e.printStackTrace();

108.                   }

109.               }

110.           }

111.    

112.           returndataList;

113.      }

備註:以上程式碼直接可以用。下面說說專案開發遇到的問題。

問題1.jsp頁面中給${aaa}賦值。

原來我是想把待上傳的檔案的路徑(即input標籤的value值) 賦值給${tmpPath},但是${aaa}只能通過<c:set var=”tmpPath” ><%=Config.value%></c:set>來賦值。如下圖

其他方式不行,不能通過JS的方式,失敗。後面的解決方法如下:


問題2.頁面給後臺傳值問題。

該問題用到了URL傳參,用jQuery的$().attr(“action”,  ”path”);修改action,再傳送需要的值。如上圖。