package Stream_test;
import java.io.*;
public class Stream_test_6 {
public static void main(String[] args) throws Exception {
File f = new File("Stream_test_6/encodeFile.text");
File enf = new File("Stream_test_6/encodedFile.text");
File def = new File("Stream_test_6/decodedFile.text");
// 创建一个待加密文件
createFile(f,10);
// 创建一个加密容器
createFile(enf,0);
// 创建一个解密容器
createFile(def,0);
// 进行文件加密
encodeFile(f,enf);
// 进行文件解密
decodeFile(enf,def);
// 对比内容
char[] fc = new char[(int)f.length()];
FileReader fis =new FileReader(f);
fis.read(fc);
String fc1 = new String(fc);
fis.close();
char[] defc = new char[(int)def.length()];
FileReader fis2 =new FileReader(f);
fis2.read(defc);
String defc1 = new String(defc);
fis2.close();
System.out.printf(“未经加密的原文件内容为:%s%n解密后文件内容为:%s%n”,fc1,defc1);
System.out.println(“利用equals判断内容是否相同,结果为:”+fc1.equals(defc1));
}
// 文件解密
private static void decodeFile(File decodingFile,File decodedFile) {
try(FileReader fis = new FileReader(decodingFile)) {
int character = 0;
while ((character = fis.read()) > -1) {
try(FileWriter fus = new FileWriter(decodedFile,true)) {
// 0-8和字母a-y和字母A-Y
if ((character < 58 && character > 48)
|| (character < 123 && character > 97)
|| (character < 91 && character > 65)) {
character -= 1;
} else if (character == 48) {
// 0->9
character = 57;
} else if (character == 65) {
// A->Z
character = 90;
} else if (character == 97) {
// a->z
character = 122;
}
fus.write(character);
}
}
} catch (Exception e) {
e.getStackTrace();
}
}
// 文件加密
private static void encodeFile(File encodingFile,File encodedFile) {
try(FileReader fis = new FileReader(encodingFile)) {
int character = 0;
while ((character = fis.read()) > -1) {
try(FileWriter fus = new FileWriter(encodedFile,true)) {
// 0-8和字母a-y和字母A-Y
if ((character < 57 && character > 47)
|| (character < 122 && character > 96)
|| (character < 90 && character > 64)) {
character += 1;
} else if (character == 57) {
// 9->0
character = 48;
} else if (character == 90) {
// Z->A
character = 65;
} else if (character == 122) {
// z->a
character = 97;
}
fus.write(character);
}
}
} catch (Exception e) {
e.getStackTrace();
}
}
// 创建一个大小为length/1024 KB的由随机ACSII码字符组成的文件
private static void createFile(File file,int length) {
// 如果文件不存在则创建
if(!file.exists()) {
try {
file.getParentFile().mkdirs();
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try(FileWriter fus = new FileWriter(file)) {
char[] randomASCII = new char[(int)length];
short start = ‘!’;
short end = ‘~’+1;
for(int i=0;i<length;i++) {
randomASCII[i] = (char)(Math.random()*(end-start)+start);
}
fus.write(randomASCII);
} catch (Exception e) {
e.getStackTrace();
}
System.out.printf(“成功创建文件(未加密):%s%n文件路径:%s%n文件大小:%,dKB%n”,file.getName(),file.getAbsoluteFile(),file.length());
}
}
缺点:性能不佳