我为您制作了一个小骨架,以具体了解那些“许多组件”可能是什么。您已经有了驱动程序 - 假设您在CaesarDriver.java
.
使用该“驱动程序”的实用程序现在看起来像这样:
import java.io.PrintWriter;
import java.util.Scanner;
/**
* This is a utility class allows to encrypt/ decrypt the data received by a Scanner {@see Scanner} using the caesar
* encoding by providing the key to be used.
*
* Note: Behind the scanner there may be a File or System.in as source
*/
public class CaesarUtility {
/**
* TODO: implement a mechanism to encrypt data ({@see Scanner}) and write the encrypted data out ({@see PrintWriter})
* TODO: use the provided key for encryption
* @param in source for the data to be encrypted {@see Scanner}
* @param out destination for the encrypted data to be written to {@see PrintWriter}
* @param key key to be used for the encryption
*/
public static void encrypt (Scanner in, PrintWriter out, String key){
// TODO: do we need to validate something? Could something be null? Do we need to care about this?
// TODO: Read from Scanner
String dataToEncrypt = "TODO: Read from Scanner";
// TODO: Encryption
String encryptedData = "Use your existing Caesar Driver with the correct method to encrypt the data";
// TODO: Write encrpyted data using the provided PrintWriter
}
/**
* TODO: The same like in encrypt but decrypt data this time
* @param in source for the data to be decrypted {@see Scanner}
* @param out destination for the decrypted data to be written to {@see PrintWriter}
* @param key key to be used for the decryption
*/
public static void decrypt (Scanner in, PrintWriter out, String key){
// TODO: Basicially the same but for decryption (e.g. you will use your driver slightly different here :))
}
}
允许这样使用世界:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* Hello i am a Application that is too lazy to implement the Caesar encoding/ decoding - luckaly someone
* made me a Utility for that :)
*
* TODO: This could need some improvement - maybe let the user type in the in/output file in the console?
*
*/
public class Application {
// TODO: How i said i am a bit rosty here - was it a number or a character - you know it better than i do i assume :)
private static final String KEY = "???";
public static void main(String[] args){
new Application().start();
}
public void start(){
// lets first encode a file - we need to have a Scanner to be able to use the Utility class (so i searched)
// SO for "Java Scanner read File" and found this:
File inputFile = new File("sensitive-data.txt");
Scanner inputScanner = null;
try {
new Scanner(inputFile);
} catch (FileNotFoundException e) {
// TODO: Exception handling (does it make sence to proceed in this case? do we have to notify the user about this?
e.printStackTrace();
}
// let the utility encode the file and write it to another file - luckaly searching SO for "Java PrintWriter example"
// helps us out here
File outFile = new File ("sensitive-data.txt");
PrintWriter outWriter = null;
try {
outWriter = new PrintWriter (outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Alright we have both - the input as well as the output and the key - its time to let the utility do its work
CaesarUtility.encrypt(inputScanner, outWriter, KEY);
// TODO: Whoopy i accidentially overwritten the source file with encoded data - luckaly i am able to decode it again
// TODO: Decode the encoded file before the boss asks about the next sensitive-data report :)
}
}
我希望这可以支持您进一步深入研究任务 - 当您下次遇到困难时,请随时使用您的所有代码更新您的答案(它至少可以让您从现在开始提出更具体的问题,这样您就不会被否决地面)。