Пожалуйста, помогите мне решить мою проблему:
Я хочу записать вывод многострочной консоли в файл, используя JAVA.
И контрольная сумма вывода консоли в другом файле.
Я не могу распечатать несколько строк вывода в файл.
Если пользовательский ввод - 'X', программа должен остановить и прекратить запись в файл.
Я могу сделать с однострочным вводом, но с многострочным не запись в файл.
Вот мой java код:
package demo1;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Scanner;
import java.util.zip.Adler32;
import java.util.zip.Checksum;
public class WriteConsoleToFile {
public static void main(String[] args) throws Exception {
try {
boolean keepAlive = true;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(keepAlive) {
String lineFromInput = in.readLine();
if(lineFromInput.equals("X") || lineFromInput.equals("x")) {
System.out.println("HALTED");
keepAlive = false;
}
else {
byte[] bytes = lineFromInput.getBytes(StandardCharsets.UTF_8);
ByteArrayInputStream bis = new ByteArrayInputStream(lineFromInput.getBytes());
System.err.println(checkSum(bis));
//path to output file
PrintStream out = new PrintStream(new
FileOutputStream("C:/Users/son/Pictures/Screenshots/OLD/output.txt"));
//path to checksum file
PrintStream checkSum = new PrintStream(new
FileOutputStream("C:/Users/son/Pictures/Screenshots/OLD/checksum.txt"));
System.setOut(checkSum);
System.setOut(out);
//output to the file a line
out.println(lineFromInput);
checkSum.println(checkSum(bis));
//close the file
out.close();
}
}
catch(IOException e1) {
System.out.println("Error during reading/writing");
}
}
public static String checkSum(ByteArrayInputStream byteArrayInputStream) {
String checksum = null;
try {
Checksum checksumEngine = new Adler32();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[8192];
int numOfBytesRead;
while( (numOfBytesRead = byteArrayInputStream.read(buffer)) > 0){
md.update(buffer, 0, numOfBytesRead);
}
byte[] hash = md.digest();
checksum = new BigInteger(1, hash).toString(16);
} catch (Exception ex) {
}
return checksum;
}
}
}