准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符。
设计一个方法
public static void encodeFile(File encodingFile, File encodedFile);
在这个方法中把encodingFile的内容进行加密,然后保存到encodedFile文件中。
加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0
字母字符:
如果是非z字符,向右移动一个,比如d变成e, G变成H
如果是z,z->a, Z-A。
字符需要保留大小写
非字母字符
比如’,&^ 保留不变,中文也保留不变
建议: 使用以前学习的练习题中的某个Java文件,比如循环练习,就有很多的字符和数字
public static void main(String[] args) {
File encodingFile = new File("G:\\encodingFile.txt");
//加密之后的文件
File encodedFile = new File("G:\\encodedFile.txt");
//解密之后的文件
File decodeingFile = new File("G:\\decodeingFile.txt");
encodeFile(encodingFile,encodedFile);
//decodeingFile(encodedFile,decodeingFile);
}
//加密文件
public static void encodeFile(File encodingFile, File encodedFile){
//读取文件内容
FileReader reader = null;
FileWriter writer = null;
System.out.println("加密前的内容:");
try {
reader = new FileReader(encodingFile);
writer = new FileWriter(encodedFile);
//文件的长度
char[] all = new char[(int) encodingFile.length()];
//加密之后的长度,用于保存加密后的字符
char[] cs = new char[(int) encodingFile.length()];
reader.read(all);
for (char b : all){
System.out.print(b+" ");
}
System.out.println();
for (int i = 0 ; i<all.length;i++){
if (all[i] >= '0' && all[i] <= '9'){
if (all[i]=='9'){
cs[i] = '0';
}else{
cs[i] = (char) (all[i]+1);
}
}else if (all[i] >= 'a' && all[i] <= 'z' || all[i]>='A' && all[i]<='Z'){
if (all[i] == 'z'){
cs[i] = 'a';
}else if (all[i] == 'Z'){
cs[i] = 'A';
}else{
cs[i] = (char) (all[i]+1);
}
}else {
cs[i] = all[i];
}
}
System.out.println("加密后的内容:");
for (char d : cs){
System.out.print(d+" ");
}
writer.write(cs);
} catch (IOException e) {
e.printStackTrace();
}finally{
if (reader!=null || writer != null){
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
解密在文件加密中生成的文件。
设计一个方法
public static void decodeFile(File decodingFile, File decodedFile);
在这个方法中把decodingFile的内容进行解密,然后保存到decodedFile文件中。
解密算法:
数字:
如果不是0的数字,在原来的基础上减1,比如6变成5, 4变成3
如果是0的数字,变成9
字母字符:
如果是非a字符,向左移动一个,比如e变成d, H变成G
如果是a,a->z, A-Z。
字符需要保留大小写
非字母字符:
比如’,&^ 保留不变,中文也保留不变
//解密文件
public static void decodeingFile(File encodedFile,File decodeingFile){
System.out.println("解密之前的内容:");
FileReader reader = null;
FileWriter writer = null;
try {
reader = new FileReader(encodedFile);
writer = new FileWriter(decodeingFile);
//解密前的文件长度
char[] all = new char[(int) encodedFile.length()];
//解密之后的文件长度,用来保存解密后的字符
char[] cs = new char[(int) encodedFile.length()];
reader.read(all);
for (char a : all){
System.out.print(a+" ");
}
for (int i= 0;i<all.length;i++){
if (all[i]>='0' && all[i] <= '9'){
if (all[i] == '0'){
cs[i] = '9';
}else{
cs[i] = (char) (all[i]-1);
}
}else if(all[i]>= 'a'&& all[i]<='z' || all[i]>='A' && all[i]<='Z'){
if (all[i] == 'a'){
cs[i] = 'z';
}else if(all[i] == 'A'){
cs[i] = 'Z';
}else{
cs[i] = (char) (all[i] - 1);
}
}else{
cs[i] = all[i];
}
}
System.out.println();
System.out.println("解密之后的内容:");
for (char d : cs){
System.out.print(d+" ");
}
writer.write(cs);
} catch (IOException e) {
e.printStackTrace();
}finally{
if (reader!=null || writer != null){
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}