十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要为大家展示了“Java探索之Thread+IO文件的加密解密的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java探索之Thread+IO文件的加密解密的示例分析”这篇文章吧。
创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为莱州企业提供专业的成都网站设计、成都做网站,莱州网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
加密启动线程
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(); Listlist = 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 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文件的加密解密的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!