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

de.invation.code.toval.file.FileReader Maven / Gradle / Ivy

package de.invation.code.toval.file;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class FileReader {
	
	protected Charset charset = Charset.forName("UTF-8");
	protected BufferedReader input = null;
	protected File inputFile = null;
	protected String systemLineSeparatorBackup = null;
	
	//------- Constructors --------------------------------------------------------------------
	
	public FileReader(String fileName) throws IOException{
		initialize(fileName);
	}
	
	public FileReader(String fileName, Charset charset) throws IOException{
		setCharset(charset);
		initialize(fileName);
	}
	
	//------- Getters and Setters -------------------------------------------------------------
	
	public Charset getCharset(){
		return charset;
	}
	
	private void setCharset(Charset charset){
		this.charset = charset;
	}
	
	public File getFile(){
		return inputFile;
	}
	
	
	//------- Methods for setting up the file reader -----------------------------------------
	
	private void initialize(String fileName) throws IOException{
		prepareFile(fileName);
		prepareReader();
	}
	
	protected void prepareFile(String fileName) throws IOException{
		inputFile = new File(fileName);
		if(inputFile.isDirectory())
			throw new IOException("I/O Error on opening file: File is a directory!");
		if(!inputFile.exists())
			throw new IOException("I/O Error on opening file: File does not exist!");
		if(!inputFile.canRead())
			throw new IOException("I/O Error on opening file: Unable to read file!");
	}
	
	protected void prepareReader() throws IOException{
		input = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), charset));
		adjustSystemProperties();
	}
	
	protected void adjustSystemProperties() throws IOException{
		systemLineSeparatorBackup = System.getProperty("line.separator");
		@SuppressWarnings("resource")
		InputStreamReader reader = new InputStreamReader(new FileInputStream(inputFile), charset);
		String lineSeparator = null;
		int next;
		while(lineSeparator == null && (next = reader.read()) != -1){
			char nextChar = (char) next;
			if(nextChar == '\n'){
				lineSeparator = "\n";
				break;
			} else if(nextChar == '\r'){
				lineSeparator = "\r";
				next = reader.read();
				if(next != -1 && ((char) next) == '\n'){
					lineSeparator += "\n";
				}
				break;
			}
		}
		if(lineSeparator != null){
			System.setProperty("line.separator", lineSeparator);
		}
	}
	
	protected void restoreSystemProperties(){
		System.setProperty("line.separator", systemLineSeparatorBackup);
	}
	
	
	//------- Functionality ------------------------------------------------------------------
	
	public String readLine() throws IOException{
		return input.readLine();
	}
	
	public void closeFile() throws IOException{
		input.close();
		restoreSystemProperties();
	}
	
	
	public static void main(String[] args) throws Exception{
		FileReader reader = new FileReader("NewFile.txt", Charset.forName("MacRoman"));
		String nextLine;
		while((nextLine = reader.readLine()) != null){
			System.out.println(nextLine);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy