问题
某软件公司欲开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括三个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这三个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这三个操作的业务代码封装在三个不同的类中。
现使用外观模式设计该文件加密模块。
package com.liyajie.Pattern.FacadePattern;
/**
* 文件加密
* @author 李亚杰
* @date 2024/4/17 8:55
* @description CipherMachine
*/
public class CipherMachine {
/**
*对字符串进行加密
* @param s 字符串
* @return 加密字符串
*/
public String encode(String s){
char[] chars = s.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (char var1 : chars){
char var2 = (char) (var1%2+97);
stringBuilder.append(var2);
}
return stringBuilder.toString();
}
}
package com.liyajie.Pattern.FacadePattern;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 文件读取
* @author 李亚杰
* @date 2024/4/17 8:35
* @description FileReader
*/
public class FileReader {
/**
* 读取文件内容
* @param filePath 文件路径
* @return 字符串
* @throws IOException
*/
public String readFile(String filePath) throws IOException {
File file= new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
StringBuilder stringBuilder = new StringBuilder();
int ch = fileInputStream.read();
while (ch!=-1){
stringBuilder.append((char) ch);
ch = fileInputStream.read();
}
return stringBuilder.toString();
}
}
package com.liyajie.Pattern.FacadePattern;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
* 文件写出
* @author 李亚杰
* @date 2024/4/17 9:01
* @description FileWriter
*/
public class FileWriter {
/**
* 导出字符串到文件
* @param s
* @return 文件路径
* @throws IOException
*/
public String writeFile(String s) throws IOException {
String path = "src/main/resources/FacadePattern/"+System.currentTimeMillis()+".txt";
File file = new File(path);
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(s.getBytes(StandardCharsets.UTF_8));
return path;
}
}
package com.liyajie.Pattern.FacadePattern;
import java.io.IOException;
/**
* 外观类
* @author 李亚杰
* @date 2024/4/17 9:07
* @description EncryptFacade
*/
public class EncryptFacade {
private CipherMachine cipherMachine;
private FileReader fileReader;
private FileWriter fileWriter;
public EncryptFacade() {
cipherMachine = new CipherMachine();
fileReader = new FileReader();
fileWriter = new FileWriter();
}
public String fileEncode(String path) throws IOException {
String s = fileReader.readFile(path);
String encode = cipherMachine.encode(s);
String encodePath = fileWriter.writeFile(encode);
return encodePath;
}
}
package com.liyajie.Pattern.FacadePattern; import java.io.IOException; /** * 测试 * @author 李亚杰 * @date 2024/4/17 9:12 * @description Clint */ public class Clint { public static void main(String[] args) throws IOException { EncryptFacade encryptFacade = new EncryptFacade(); String s = encryptFacade.fileEncode("src/main/resources/FacadePattern/test.txt"); System.out.println(s); } }