Java探索之Thread+IO文件的加密解密的示例分析
短信预约 -IT技能 免费直播动态提醒
这篇文章主要为大家展示了“Java探索之Thread+IO文件的加密解密的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java探索之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<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(); } } 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(); }}
以上是“Java探索之Thread+IO文件的加密解密的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341