加密模块
准备一个文本文件(非二进制),其中包含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。
字符需要保留大小写
非字母字符:
比如’,&^ 保留不变,中文也保留不变
部分代码:
// 加密模块
public static void encodeFile(File encodingFile, File encodedFile) {
/*
加密 准备一个文本文件(非二进制),其中包含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文件,比如循环练习,就有很多的字符和数字
*/
try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(encodedFile)){
char[] data = new char[(int)encodingFile.length()];
fr.read(data);//读
System.out.println("====加密前的内容");
System.out.println(data);
for (int i = 0; i < data.length; i++) {
if (Character.isDigit(data[i])) {//如果是数字
if(data[i] == '9') {
data[i] = '0';
} else {
data[i] += 1;
}
} else if (Character.isLetter(data[i])) {//如果是字母,中文也算字母,加一个判断
if(data[i] == 'z') {
data[i] = 'a';
} else if (data[i] == 'Z'){
data[i] = 'A';
} else if (data[i] >= 'a' && data[i] < 'z' || data[i] >= 'A' && data[i] < 'Z'){
data[i] += 1;
}
}
}
System.out.println("====加密后的内容");
System.out.println(data);
fw.write(data);//写
} 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 decodingFile(File encodingFile, File decodedFile) {//加密后,解密后
/*
解密在文件加密中生成的文件。
设计一个方法
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。
字符需要保留大小写
非字母字符:
比如',&^ 保留不变,中文也保留不变
*/
try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(decodedFile)){
//准备读写字符流
char[] data = new char[(int)encodingFile.length()];
fr.read(data);
System.out.println("====源文件内容");
System.out.println(data);
for (int i = 0; i < data.length; i++) {
if (Character.isLetter(data[i])) {//如果是字母
if (data[i] == 'a') {
data[i] = 'z';
} else if(data[i] == 'A') {
data[i] = 'Z';
} else {
data[i] -= 1;
}
} else if(Character.isDigit(data[i])) {//如果是数字
if (data[i] == '0') {
data[i] = '9';
} else {
data[i] -= 1;
}
}
}
System.out.println("====解密后的内容");
System.out.println(data);
fw.write(data);
} catch(IOException e) {
e.printStackTrace();
}
}
【附】
以下是全部代码
(需要运行,需要创建一下必要的文件和文件夹)
package j2se;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class IOJiaMiJieMi {
public static void main(String[] args) {
//未加密文本为:
//1 a 9 z Z ! @ # $ % ^ & * ( ) _ + | 中
File encodingFile = new File("D:/LOL/LOL.txt");//未加密
File encodedFile = new File("D:/LOL/LOL2.txt");//加密后
File endFile = new File("D:/LOL/LOL3.txt");//解密后
encodeFile(encodingFile, encodedFile);//加密过程
System.out.println("--------------------------------------");
decodingFile(encodedFile, endFile);//解密过程
}
// 加密模块
public static void encodeFile(File encodingFile, File encodedFile) {
/*
加密 准备一个文本文件(非二进制),其中包含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文件,比如循环练习,就有很多的字符和数字
*/
try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(encodedFile)){
char[] data = new char[(int)encodingFile.length()];
fr.read(data);//读
System.out.println("====加密前的内容");
System.out.println(data);
for (int i = 0; i < data.length; i++) {
if (Character.isDigit(data[i])) {//如果是数字
if(data[i] == '9') {
data[i] = '0';
} else {
data[i] += 1;
}
} else if (Character.isLetter(data[i])) {//如果是字母,中文也算字母,加一个判断
if(data[i] == 'z') {
data[i] = 'a';
} else if (data[i] == 'Z'){
data[i] = 'A';
} else if (data[i] >= 'a' && data[i] < 'z' || data[i] >= 'A' && data[i] < 'Z'){
data[i] += 1;
}
}
}
System.out.println("====加密后的内容");
System.out.println(data);
fw.write(data);//写
} catch (IOException e) {
e.printStackTrace();
}
}
//解密模块
public static void decodingFile(File encodingFile, File decodedFile) {//加密后,解密后
/*
解密在文件加密中生成的文件。
设计一个方法
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。
字符需要保留大小写
非字母字符:
比如',&^ 保留不变,中文也保留不变
*/
try (FileReader fr = new FileReader(encodingFile); FileWriter fw = new FileWriter(decodedFile)){
//准备读写字符流
char[] data = new char[(int)encodingFile.length()];
fr.read(data);
System.out.println("====源文件内容");
System.out.println(data);
for (int i = 0; i < data.length; i++) {
if (Character.isLetter(data[i])) {//如果是字母
if (data[i] == 'a') {
data[i] = 'z';
} else if(data[i] == 'A') {
data[i] = 'Z';
} else {
data[i] -= 1;
}
} else if(Character.isDigit(data[i])) {//如果是数字
if (data[i] == '0') {
data[i] = '9';
} else {
data[i] -= 1;
}
}
}
System.out.println("====解密后的内容");
System.out.println(data);
fw.write(data);
} catch(IOException e) {
e.printStackTrace();
}
}
}
最后,中文的乱码还是没有解决,有待完善!