Используя java, я хочу записать вывод многострочной консоли в файл в java и контрольную сумму этих строк в другом файле. - PullRequest
0 голосов
/ 20 марта 2020

Пожалуйста, помогите мне решить мою проблему:

Я хочу записать вывод многострочной консоли в файл, используя 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;
        }   
    }
}
...