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

网友投稿 248 2023-03-23


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 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 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();

}xhmaCZfinally{

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多线程之线程通信生产者消费者模式及等待唤醒机制代码详解等,有什么问题可以随时留言,会及时回复大家的。感谢朋友们对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Sublime Text新建.vue模板并高亮(图文教程)
下一篇:Java并发编程之显式锁机制详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~