import java.io.*;
/*** 原理:利用异或的特性,a == a ^b ^b* 即同一数据对同一个数经过两次异或后仍是原数据* 使用异或实现文件的简易加密或解密,同一数据异或一个数字两次,还是原数据*/public class textFile {public static void main(String[] args) {String fileName ="F:\\jiami112";int key = getKey("加个密");/*** 加密传true * 解密 false*/RecursiveEncodeOrDecode(fileName,key,false);}/*** 递归加密or解密* @param Path 文件夹路径* @param key 密钥*/static public void RecursiveEncodeOrDecode(String Path,int key,boolean isJ){File folder = new File(Path);if(!folder.exists()){return ;}//是否为目录if(!folder.isDirectory()){ReWriteInfoForFile(folder,key,isJ);return ;}File[] listFiles = folder.listFiles();if(null==listFiles||listFiles.length==0){System.out.println("文件夹"+Path+"为空");return ;}for(File file:listFiles) {//是否为目录if (file.isDirectory()) {try {//文件夹名称更改File newFile = null;if(isJ){newFile =new File(file.getParent()+"\\"+encryptKaisa(file.getName(),key));}else{newFile =new File(file.getParent()+"\\"+decryptKaiser(file.getName(),key));}org.apache.commons.io.FileUtils.moveDirectory(file, newFile);//是目录 继续递归RecursiveEncodeOrDecode(newFile.getAbsolutePath(),key,isJ);}catch (Exception e){e.getMessage();}} else {//是文件进行操作ReWriteInfoForFile(file,key,isJ);}}}/*** 加密解密后 覆盖原来文件* @param file 文件* @param key 密码* @param isJ 是否加密 true false*/public static void ReWriteInfoForFile(File file,int key,boolean isJ) {try{String fileName = file.getName();if(isJ){fileName =encryptKaisa(fileName,key);}else{fileName = decryptKaiser(fileName,key);}String newFilePath = file.getParent()+"\\"+fileName;InputStream is = new FileInputStream(file);OutputStream os = new FileOutputStream(new File(newFilePath));BufferedInputStream bis = new BufferedInputStream(is);BufferedOutputStream bos = new BufferedOutputStream(os);byte[] data = new byte[1024];int len = 0 ;while((len = bis.read(data))!= -1){for(int i=0;i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!