软件编程
位置:首页>> 软件编程>> java编程>> Java探索之Thread+IO文件的加密解密代码实例

Java探索之Thread+IO文件的加密解密代码实例

作者:书思BookReflect  发布时间:2023-01-26 19:07:03 

标签:java,io流,线程

这篇文章向大家分享了几段代码,主要是关于Thread+IO文件的加密解密,下面看看具体代码:

加密启动线程


package com.hz.subsection;
import java.io.File;
public class enCodeFileThread extends Thread {
 public Files files;
 public File file;
 public File dst;
 public enCodeFileThread(String name,Files files, File file,File dst) {
   super(name);
   this.dst = dst;
   this.files = files;
   this.file = file;
 }
 public void run() {
   files.enCode(file,dst);
 }
}

解密启动线程


package com.hz.subsection;
import java.io.File;
public class enCodeFileThread extends Thread {
 public Files files;
 public File file;
 public File dst;
 public enCodeFileThread(String name,Files files, File file,File dst) {
   super(name);
   this.dst = dst;
   this.files = files;
   this.file = file;
 }
 public void run() {
   files.enCode(file,dst);
 }
}

解密启动线程


package com.hz.subsection;
import java.io.File;
public class deCodeFileThread extends Thread {
 public Files files;
 public File file;
 public File dst;
 public deCodeFileThread(String name,Files files, File file,File dst) {
   super(name);
   this.dst = dst;
   this.files = files;
   this.file = file;
 }
 public void run() {
   files.deCode(dst);
 }
}

文件对象序列化


package com.hz.subsection;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Files implements Serializable {
 /**
  * 默认序列id
  */
 private static final long serialVersionUID = 1L;
 private String filesNo;
 private String name;
 private byte[] content;
 private boolean flag = true;
 public Files() {
 }
 public Files(String filesNo){}
 public Files(String filesNo,String name, byte[] content) {
   super();
   this.name = name;
   this.content = content;
 }
 public String getFilesNo() {
   return filesNo;
 }
 public void setFilesNo(String filesNo) {
   this.filesNo = filesNo;
 }
 public String getName() {
   return name;
 }
 public void setName(String name) {
   this.name = name;
 }
 public byte[] getContent() {
   return content;
 }
 public void setContent(byte[] content) {
   this.content = content;
 }
 //加密序列化文件
 public synchronized void enCode(File file,File dst) {
   if(!flag){
     try {
       wait();
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
   }else{
     //获取文件夹下的每一个文件
     File[] chlidFiles = file.listFiles();
     List<Files> list = new ArrayList();
     for (int i = 0; i < chlidFiles.length; i++) {
       File tmpFile = chlidFiles[i];
       Files files = getFiled(tmpFile);
       list.add(files);
     }
     saveFiles(dst,list);
     flag = true;
     notifyAll();
   }  
 }
 /**
  * 保存信息
  * @param dst
  * @param list
  */
 private void saveFiles(File dst, List<Files> list) {
   FileOutputStream fos = null;
   ObjectOutputStream oos = null;
   try {
     fos = new FileOutputStream(dst);
     oos = new ObjectOutputStream(fos);
     oos.writeObject(list);
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }finally{
     try {
       if(oos != null){
         oos.close();
         oos = null;
       }
       if(fos != null){
         fos.close();
         fos = null;
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }
 public Files getFiled(File tmpFile) {
   Files files = new Files();
   String name = tmpFile.getName();
   files.setName(name);
   FileInputStream fis = null;
   ByteArrayOutputStream baos = null;
   try {
     fis = new FileInputStream(tmpFile);
     baos = new ByteArrayOutputStream();
     byte[] buff = new byte[1024];
     int hasRead = 0;
     while((hasRead = fis.read(buff)) > -1){
       baos.write(buff, 0, hasRead);
     }
     files.setContent(baos.toByteArray());
     return files;
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }finally{
     try {
       if(baos != null){
         baos.close();
         baos = null;
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
     try {
       if(fis != null){
         fis.close();
         fis = null;
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   return null;
 }
 //解密序列化文件
 public synchronized void deCode(File dst) {
   if(!flag){
     try {
       wait();
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
   }else{
     List<Files> list = readFiles(dst);
   for (Files files : list) {
     String name = files.getName();
     byte[] content = files.getContent();
     File file = new File(dst.getParent()+"//bbb",name);
     if(!file.exists()){
       try {
         file.createNewFile();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
     FileOutputStream fos = null;
     try {
       fos = new FileOutputStream(file);
       fos.write(content);
     } catch (FileNotFoundException e) {
       e.printStackTrace();
     } catch (IOException e) {
       e.printStackTrace();
     }finally{
       try {
         if(fos != null){
           fos.close();
           fos = null;
         }
         flag = false;
         notifyAll();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
   }
 }
 private List<Files> readFiles(File dst) {
   FileInputStream fis = null;
   ObjectInputStream ois = null;
   try {
     fis = new FileInputStream(dst);
     ois = new ObjectInputStream(fis);
     List<Files> list = (List<Files>) ois.readObject();
     return list;
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   } catch (ClassNotFoundException e) {
     e.printStackTrace();
   }finally{
     try {
       if(ois != null){
         ois.close();
         ois = null;
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
     try {
       if(fis != null){
         fis.close();
         fis = null;
       }
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   return null;
 }
 public String toString() {
   return "Files [name="
       + name
       + ", content="
       + (content != null ? arrayToString(content, content.length)
           : null) + "]";
 }
 private String arrayToString(Object array, int len) {
   StringBuffer buffer = new StringBuffer();
   buffer.append("[");
   for (int i = 0; i < len; i++) {
     if (i > 0)
       buffer.append(", ");
     if (array instanceof byte[])
       buffer.append(((byte[]) array)[i]);
   }
   buffer.append("]");
   return buffer.toString();
 }
 public int hashCode() {
   return getFilesNo().hashCode();
 }
 public boolean equals(Object obj) {
   if(obj!=null && getClass() == Files.class){
     Files target = (Files) obj;
     return target.getFilesNo().equals(filesNo);
   }
   return false;
 }
}

测试类


package com.hz.subsection;
import java.io.File;
public class TestThread {
 public static void main(String[] args) {
   Files files = new Files("123");
   File file = new File("E:\\20160928JavaBase\\Test\\aaa");
   File file2 = new File("E:\\20160928JavaBase\\Test\\gg");
   new enCodeFileThread("加密文件", files,file ,new File(file, "dst.hz")).start();
   new deCodeFileThread("解密文件", files, file, new File(file, "dst.hz")).start();
 }
}

来源:http://blog.csdn.net/qq_33624284/article/details/53607899

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com