All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiongyingqi.util.ConsoleHelper Maven / Gradle / Ivy

There is a newer version: 0.1.10
Show newest version
package com.xiongyingqi.util;

import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * java控制台帮助类
 * Created by blademainerxiongyingqi.com on 2014/11/6 0006.
 */
public class ConsoleHelper {
    private File file;
    private OutputStream outputStream;
    private PipedInputStream pipedInputStream;
    private boolean isSetPipedInputStream;
    private boolean running;
    private FileStrategy fileStrategy;
    private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HHmmss");
    private long nextCheckTime = new Date().getTime();

    private long maxFileSize = 30 * FileHelper.MB;

    public enum FileStrategy {
        DAILY, MAX_SIZE
    }

    public ConsoleHelper(File file, FileStrategy fileStrategy){
        Assert.notNull(file);
        this.file = file;
        if (fileStrategy == null) {
            fileStrategy = FileStrategy.DAILY;
        }
        this.fileStrategy = fileStrategy;
        FileHelper.initFile(file);
        try {
            this.outputStream = new FileOutputStream(file, true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        init();
    }

    public ConsoleHelper(OutputStream outputStream) {
        this.outputStream = outputStream;
        init();
    }

    public ConsoleHelper(PipedInputStream pipedInputStream) {
        this.pipedInputStream = pipedInputStream;
        isSetPipedInputStream = true;
        init();
    }

    public long getMaxFileSize() {
        return maxFileSize;
    }

    public void setMaxFileSize(long maxFileSize) {
        this.maxFileSize = maxFileSize;
    }

    public void init() {
        if (pipedInputStream == null) {
            isSetPipedInputStream = false;
            pipedInputStream = new PipedInputStream();
        }
        PipedOutputStream pipedOS = new PipedOutputStream();
        try {
            pipedOS.connect(pipedInputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        PrintStream ps = new PrintStream(pipedOS);
        System.setOut(ps);
        System.setErr(ps);

        if (!isSetPipedInputStream) {
            running = true;
            ReadThread readThread = new ReadThread();
            readThread.start();
        }
    }

    public void stop() {
        running = false;
    }

    private void append(byte[] bts) {
//        final File file = new File("out.txt");
//        FileHelper.appendBytesToFile(file, bts);
        checkFile();
        try {
            outputStream.write(bts);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void checkFile() {
        if (fileStrategy != null) {
            if (fileStrategy == FileStrategy.DAILY && System.currentTimeMillis() >= nextCheckTime) {
                long l = file.lastModified();
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(l);
                int i = DateHelper.diffOfDay(calendar.getTime(), new Date());
                if (i != 0) {
                    renameFile();
                }
                Date day = DateHelper.getDay(new Date());// 今天0时
                Calendar calendarTomorrow = Calendar.getInstance();
                calendarTomorrow.setTimeInMillis(day.getTime());
                calendarTomorrow.set(Calendar.DAY_OF_YEAR, calendarTomorrow.get(Calendar.DAY_OF_YEAR) + 1);
                nextCheckTime = calendarTomorrow.getTimeInMillis();
            } else if (fileStrategy == FileStrategy.MAX_SIZE) {
                long length = file.length();
                if (length > maxFileSize) {
                    renameFile();
                }
            }
        }
    }

    private void renameFile() {
        long l = file.lastModified();
        Date date = new Date(l);
        String dateToStr = dateFormat.format(date);
        String fileName = file.getName();
        String parent = file.getParent();
        File newFile = new File(fileName + "." + dateToStr);
        try {
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        boolean b = file.renameTo(newFile);
        if (b) {
            file = new File(parent, fileName);
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public File[] listFiles() {
        final String fileName = file.getName();
        File parentFile = file.getParentFile();
        File[] files = parentFile.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.startsWith(fileName + ".");
            }
        });
        return files;
    }

    class ReadThread extends Thread {
        @Override
        public void run() {
            int bufferLength = 1024;
            byte[] bts = new byte[bufferLength];
            try {
                int length;
                while (running) {
                    if ((length = pipedInputStream.read(bts, 0, bufferLength)) != -1) {
                        byte[] data = new byte[length];
                        System.arraycopy(bts, 0, data, 0, length);
                        append(data);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    public static void main(String[] args) throws FileNotFoundException {
        final PipedInputStream pipedIS = new PipedInputStream();
        PipedOutputStream pipedOS = new PipedOutputStream();

        Thread thread = new Thread() {
            @Override
            public void run() {
                int bufferLength = 1024;
                byte[] bts = new byte[bufferLength];
                try {
                    int length;
                    while (true) {
                        if ((length = pipedIS.read(bts, 0, bufferLength)) != -1) {
                            byte[] data = new byte[length];
                            System.arraycopy(bts, 0, data, 0, length);
//                            append(data);
//                            String s = new String(data);
//                            stringBuffer.append(s);
//                            FileHelper.appendStringToFile(file, stringBuffer.toString());
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };

        thread.start();
        try {
            pipedOS.connect(pipedIS);
        } catch (IOException e) {
            System.err.println("连接失败");
            System.exit(1);
        }

//        PrintStream ps = new PrintStream(pipedOS);
        PrintStream ps = new PrintStream(new FileOutputStream(new File("out.txt")));
        System.setOut(ps);
        System.setErr(ps);

        Thread thread2 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    System.out.println("呵呵" + i);
                }
            }
        };
        thread2.start();

    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy