From 9bfa39305ba8611d2f41e2db7c278edfe6b21257 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 6 Aug 2016 22:57:40 +0300 Subject: Handle input and output differently on Windows and other systems Create IOHandler interface Create classes WindowsIOHandler and StandardIOHandler that implement IOHandler --- src/main/com/jantuomi/tunkki/utils/IO.java | 84 +++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 12 deletions(-) (limited to 'src/main/com/jantuomi/tunkki/utils/IO.java') diff --git a/src/main/com/jantuomi/tunkki/utils/IO.java b/src/main/com/jantuomi/tunkki/utils/IO.java index 03e575c..88d1a5c 100644 --- a/src/main/com/jantuomi/tunkki/utils/IO.java +++ b/src/main/com/jantuomi/tunkki/utils/IO.java @@ -1,45 +1,105 @@ package com.jantuomi.tunkki.utils; import jline.console.ConsoleReader; +import org.apache.commons.lang3.SystemUtils; import java.io.IOException; import java.io.PrintWriter; +import java.util.Scanner; /** * Created by jan on 4.8.2016. */ public class IO { private static IO instance = new IO(); - private ConsoleReader reader; - private PrintWriter printer; + private IOHandler ioHandler; public static IO getInstance() { return instance; } private IO() { - try { - reader = new ConsoleReader(); - printer = new PrintWriter(System.out); - } catch (IOException e) { - e.printStackTrace(); + if (SystemUtils.IS_OS_WINDOWS) { + ioHandler = new WindowsIOHandler(); + } else { + ioHandler = new StandardIOHandler(); } - reader.setBellEnabled(false); - reader.setExpandEvents(false); } public String readLine(String promptMessage) throws IOException { System.out.print(promptMessage); - String line = reader.readLine(); + + String line = ioHandler.readLine(); return line.trim(); } public void printLine(String line) { - printer.println(line); + ioHandler.printLine(line); } public void flush() { - printer.flush(); + ioHandler.flush(); + } + + private class WindowsIOHandler implements IOHandler { + private Scanner scanner = new Scanner(System.in); + + @Override + public String readLine() { + return scanner.nextLine(); + } + + @Override + public void printLine(String line) { + System.out.println(line); + } + + @Override + public void flush() { + System.out.flush(); + } + } + + private class StandardIOHandler implements IOHandler { + private ConsoleReader reader; + private PrintWriter writer; + + public StandardIOHandler() { + try { + reader = new ConsoleReader(); + writer = new PrintWriter(System.out); + } catch (IOException e) { + e.printStackTrace(); + } + reader.setBellEnabled(false); + reader.setExpandEvents(false); + } + + @Override + public String readLine() { + try { + return reader.readLine(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void printLine(String line) { + writer.println(line); + } + + @Override + public void flush() { + writer.flush(); + } + } + + private interface IOHandler { + String readLine(); + void printLine(String line); + void flush(); } } -- cgit v1.3