栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java探索之Thread+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 {
  
  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 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();
    }  
  }
  
  private void saveFiles(File dst, List 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 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 readFiles(File dst) {
    FileInputStream fis = null;
    ObjectInputStream ois = null;
    try {
      fis = new FileInputStream(dst);
      ois = new ObjectInputStream(fis);
      List list = (List) 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();
  }
}

总结

以上就是本文关于Java探索之Thread+IO文件的加密解密代码实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java创建与结束线程代码示例、Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号