Java探索之Thread+IO文件的加密解密代码实例
作者:书思BookReflect 发布时间:2023-01-26 19:07:03
标签:java,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();
}
}
来源:http://blog.csdn.net/qq_33624284/article/details/53607899


猜你喜欢
- 今天研究了一下scope的作用域。默认是单例模式,即scope="singleton"。另外scope还有prototy
- Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。一、当两个并发线程访问同一个
- 本篇实例内容是关于C#读取CAD文件的,直接看代码//在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上
- 昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了
- 在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View
- 最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指
- 1、问题我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是1)、获取包名打开当前运行的app,然后输入
- Android Notification的多种用法总结我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏
- 目录1.前言2.不同进制的特点3.进制之间的转换3.1 二进制转十进制:3.2 十进制转二进制:3.3 二进制转八进制:3.4 十六进制转二
- Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence。standard
- 日常使用中spring的 @Cacheable 大家一定不陌生,基于aop机制的缓存实现,并且可以选择cacheManager具体提供缓存的
- Lambda表达式的心得如题,因为博主也是最近才接触到Lambda表达式的(PS 在这里汗颜一会)。我并不会讲解它的原理,诚然任何一件事物如
- 前言在上一篇普通的加载千篇一律,有趣的 loading 万里挑一 中,我们介绍了使用Path类的PathMetrics属性来控制绘制点在路径
- 本功能是在winform平台上实现的,其他平台大同小异,不多做介绍。1.首先创建一个测试用winform窗体2.在winform窗体上添加一
- 公钥与私钥公钥与私钥是成对的,一般的,我们认为的是公钥加密、私钥解密、私钥签名、公钥验证,有人说成私钥加密,公钥解密时不对的。公钥与私钥的生
- 扩展阅读c#基础系列1---深入理解 值类型和引用类型c#基础系列2---深入理解 String引言在上篇文章深入理解值类型和引用类型的时候
- 网上教程7.0大多数配置是这样compile ‘com.jakewharton:butterknife:7.0.1' ,不知道他们用
- WPF动画效果系列WPF实现动画效果(一)之基本概念WPF实现动画效果(二)之From/To/By 动画WPF实现动画效果(三)之时间线(T
- 大家可以自行百度下阿里分布式事务,在这里我就不啰嗦了。下面是阿里分布式事务开源框架的一些资料,本文是springboot+dubbo+fes
- 一,Maven 依赖 pom.xml配置1, 去掉默认日志,以便切换到log4j2的日志依赖2, 然后添加如下两个日志依赖二,在工程根目录下