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

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

这篇文章向大家分享了几段代码,主要是关于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

标签:java,io流,线程
0
投稿

猜你喜欢

  • java获取redis日志信息与动态监控信息的方法

    2021-11-19 06:24:55
  • 解决Eclipse的Servers视图中无法添加Tomcat6/Tomcat7的方法

    2023-03-30 22:22:27
  • Java 语言实现清除带 html 标签的内容方法

    2021-07-29 23:47:43
  • Android之ArcSlidingHelper制作圆弧滑动效果

    2021-07-23 03:10:24
  • Java枚举类与注解,新手一篇搞定它

    2022-03-10 08:47:52
  • Java中的字节,字符输出流与字节和字符输入流的简单理解

    2022-11-30 01:56:13
  • Windows窗体的.Net框架绘图技术实现方法

    2022-06-29 13:32:23
  • ListView 分页加载更新实例分享

    2021-09-05 06:53:11
  • 使用jpa之动态插入与修改(重写save)

    2021-07-04 21:02:26
  • 关于同一个service调用service本身的方法

    2023-09-06 13:57:00
  • c#数组详解

    2023-01-31 13:09:08
  • Android开发之开关按钮用法示例

    2021-12-24 22:16:11
  • Android使用TextView,设置onClick属性无效的解决方法

    2022-06-27 11:32:39
  • JDK源码分析之String、StringBuilder和StringBuffer

    2022-01-23 00:10:20
  • Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)

    2022-04-21 03:42:02
  • 详解maven配置多仓库的方法示例

    2021-06-10 14:13:22
  • Android ADB常用命令总结

    2022-05-24 18:07:42
  • Android仿滴滴出行验证码输入框功能实例代码

    2022-12-08 05:15:49
  • Android获取SHA1的方法

    2022-11-18 20:55:12
  • Android中隐藏标题栏和状态栏的方法

    2022-04-16 07:04:27
  • asp之家 软件编程 m.aspxhome.com