package com.stardust.pio; import java.io.*; import java.util.ArrayList; import java.util.List; /** * Created by Stardust on 2017/4/1. */ public class PReadableTextFile extends PFile implements Closeable { private BufferedReader mBufferedReader; private FileInputStream mFileInputStream; private int mBufferingSize; private String mEncoding; public PReadableTextFile(String path) { this(path, PFile.DEFAULT_ENCODING); } public PReadableTextFile(String path, String encoding) { this(path, encoding, -1); } public PReadableTextFile(String path, String encoding, int bufferingSize) { mEncoding = encoding; mBufferingSize = bufferingSize; try { mFileInputStream = new FileInputStream(path); } catch (FileNotFoundException e) { throw new UncheckedIOException(e); } } private void ensureBufferReader() { if (mBufferedReader == null) { try { if (mBufferingSize == -1) mBufferedReader = new BufferedReader(new InputStreamReader(mFileInputStream, mEncoding)); else mBufferedReader = new BufferedReader(new InputStreamReader(mFileInputStream, mEncoding), mBufferingSize); } catch (UnsupportedEncodingException e) { throw new UncheckedIOException(e); } } } public String read() { try { byte[] data = new byte[mFileInputStream.available()]; mFileInputStream.read(data); return new String(data, mEncoding); } catch (IOException e) { throw new UncheckedIOException(e); } } public String read(int size) { ensureBufferReader(); try { char[] chars = new char[size]; int len = mBufferedReader.read(chars); return new String(chars, 0, len); } catch (IOException e) { throw new UncheckedIOException(e); } } public String readline() { ensureBufferReader(); try { return mBufferedReader.readLine(); } catch (IOException e) { throw new UncheckedIOException(e); } } public String[] readlines() { ensureBufferReader(); List<String> lines = new ArrayList<>(); try { while (mBufferedReader.ready()) { lines.add(mBufferedReader.readLine()); } return lines.toArray(new String[lines.size()]); } catch (IOException e) { throw new UncheckedIOException(e); } } @Override public void close() { try { if (mBufferedReader != null) { mBufferedReader.close(); } else { mFileInputStream.close(); } } catch (IOException e) { throw new UncheckedIOException(e); } } }