Java tutorial
/* * Copyright (c) 2010-2011 Ardesco Solutions - http://www.ardescosolutions.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.lazerycode.ebselen.handlers; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FileHandler { private static final Logger LOGGER = LoggerFactory.getLogger(FileHandler.class); private final String sepReg = "(\\\\|/)"; private boolean createIfNotExist; private boolean appendToFile; private boolean fileIsWritable = false; private boolean fileIsReadable = false; private String filePath; private String fileName; private String fileExtension; private FileWriter writeableFile; private File currentFile; private OutputStream writableFileOutputStream; public FileHandler(File fileObject) throws Exception { if (fileObject.exists()) { if (fileObject.canRead()) { this.currentFile = fileObject; this.fileIsReadable = true; } else { LOGGER.error("Unable to read '{}'", this.filePath + this.fileName); throw new IOException("Unable to read file " + this.filePath + this.fileName); } } setAbsoluteFilename(fileObject.getAbsolutePath()); } /** * @param absoluteFilename */ public FileHandler(String absoluteFilename) { initialiseFile(absoluteFilename, false); } /** * @param absoluteFilename * @param value */ public FileHandler(String absoluteFilename, boolean value) { initialiseFile(absoluteFilename, value); } public void initialiseFile(String absoluteFilename, boolean value) { setAbsoluteFilename(absoluteFilename); setCreateIfNotExist(value); setAppendToFile(false); } public final void setAbsoluteFilename(String value) { setFileName(value.replaceFirst("^.*" + sepReg, "")); setFilePath(value.substring(0, value.length() - this.fileName.length())); } public final void setFileName(String value) { if (value.matches(sepReg)) { LOGGER.error("The filename '{}' is not valid!", value); return; } this.fileName = value; String[] fileComponents = this.fileName.split("\\."); if (fileComponents.length > 1) { this.fileExtension = fileComponents[fileComponents.length - 1]; } else { this.fileExtension = ""; } } public String getFileName() { return this.fileName; } public String getExtension() { return this.fileExtension; } private boolean isFileWriteable() { return this.fileIsWritable; } public final void setFilePath(String value) { String[] pathExploded = value.split(sepReg); String path = ""; for (String pathSegment : pathExploded) { path += pathSegment + System.getProperty("file.separator"); } this.filePath = path; } public String getFilePath() { return this.filePath; } public String getAbsoluteFile() { return this.filePath + this.fileName; } public final void setCreateIfNotExist(boolean value) { this.createIfNotExist = value; } public boolean getCreateIfNotExist() { return this.createIfNotExist; } public final void setAppendToFile(boolean value) { this.appendToFile = value; } public boolean getAppendToFile() { return this.appendToFile; } public FileWriter getWriteableFile() throws Exception { if (!this.fileIsWritable) { this.openFileForWriting(); } return this.writeableFile; } public OutputStream getWritableFileOutputStream() throws Exception { if (!this.fileIsWritable) { this.openFileForWriting(); } return this.writableFileOutputStream; } public File getFile() throws Exception { if (!this.fileIsReadable) { this.openFile(); } return this.currentFile; } private void openFile() throws Exception { File fileToOpen = new File(this.filePath + this.fileName); if (fileToOpen.exists()) { if (fileToOpen.canRead()) { this.currentFile = fileToOpen; this.fileIsReadable = true; } else { LOGGER.error("Unable to read '{}'", this.filePath + this.fileName); throw new IOException("Unable to read file " + this.filePath + this.fileName); } } else if (this.createIfNotExist) { File directory = new File(this.filePath); if (!directory.exists()) { directory.mkdirs(); } fileToOpen.createNewFile(); this.currentFile = fileToOpen; } else { LOGGER.error("'{}' does not exist!", this.filePath + this.fileName); throw new IOException(this.filePath + this.fileName + "does not exist!"); } } private void openFileForWriting() throws Exception { if (this.fileIsReadable != true) { this.openFile(); } if (this.fileIsWritable == false) { this.currentFile.setWritable(true); this.fileIsWritable = true; } this.writeableFile = new FileWriter(this.currentFile, this.appendToFile); this.writableFileOutputStream = new FileOutputStream(this.currentFile); this.fileIsWritable = true; } public void write(String value) throws Exception { if (!this.fileIsWritable) { this.openFileForWriting(); } this.writeableFile.write(value); } public void close() throws Exception { if (this.writeableFile != null) { this.writeableFile.close(); } if (writableFileOutputStream != null) { this.writableFileOutputStream.close(); this.writeableFile = null; } this.fileIsWritable = false; this.currentFile = null; this.fileIsReadable = false; } /** * Copy the file to a specific location * * @param absoluteFileName - Target location for copy. * @return * @throws Exception */ public boolean copyFileTo(String absoluteFileName) throws Exception { if (this.fileIsReadable != true) { this.openFile(); } File fileDestination = new File(absoluteFileName); if (this.currentFile.exists()) { if (this.currentFile.canRead()) { try { FileUtils.copyFile(this.currentFile, fileDestination); return true; } catch (Exception Ex) { LOGGER.warn("Failed to copy file to '{}'", absoluteFileName); return false; } } else { LOGGER.error("Unable to read '{}'", this.filePath + this.fileName); throw new IOException("Unable to read file " + this.filePath + this.fileName); } } else { LOGGER.error("'{}' does not exist!", this.filePath + this.fileName); throw new IOException(this.filePath + this.fileName + "does not exist!"); } } }