import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
public class JiaMiDirAll {
public static void main(String[] args) {
System.out.println("输入文件夹");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
File dir=new File(s);
if(! dir.isDirectory()) {
System.out.println("不是文件夹");
System.exit(0);
}
System.out.println("请输入密钥:");
int key=sc.nextInt();
try {
encryptDir(dir,key);
System.out.println("完成");
} catch (IOException e) {
e.printStackTrace();
}
sc.close();
}
private static void encryptDir(File dir, int key) throws IOException {
// 对目录列表,列不出来直接结束
File[] files=dir.listFiles();
if(files==null)return;
for(File f:files)
{
if(f.isFile())
{
encrypt(f, key);
}
else{
encryptDir(dir, key);
}
}
}
private static void encrypt(
File file, int key) throws IOException {
/*
* 从文件读取一个字节值,
* 对key异或后,再写回到文件
*/
RandomAccessFile raf =
new RandomAccessFile(file, "rw");
byte[] buff = new byte[8192];
int n;//保存每一批的数量
while((n = raf.read(buff)) != -1) {
//对数组前n个字节值加密
for(int i=0;i<n;i++) {
buff[i] ^= key;
}
//下标前移n个位置
raf.seek(raf.getFilePointer()-n);
//数组中前n个字节,一批写回文件
raf.write(buff,0,n);
}
raf.close();
}
}
运行结果1
输入文件夹
D:\ready
请输入密钥:
250
完成
ready文件夹下的文件被加密,无法正常打开
运行结果2
输入文件夹
D:\ready
请输入密钥:
250
完成
ready文件夹下的文件全部解密,被正常打开