加密启动线程
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 = 1 L;
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();
}
}