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