Java tutorial
package info.fetter.logstashforwarder; /* * Copyright 2015 Didier Fetter * * 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. * */ import info.fetter.logstashforwarder.util.RandomAccessFile; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; //import java.io.RandomAccessFile; import org.apache.commons.lang.builder.ToStringBuilder; import com.fasterxml.jackson.annotation.JsonIgnore; public class FileState { @JsonIgnore private File file; private String directory; private String fileName; @JsonIgnore private long lastModified; @JsonIgnore private long size; @JsonIgnore private boolean deleted = false; private long signature; private int signatureLength; @JsonIgnore private boolean changed = false; @JsonIgnore private RandomAccessFile randomAccessFile; private long pointer = 0; @JsonIgnore private FileState oldFileState; @JsonIgnore private Event fields; @JsonIgnore private boolean matchedToNewFile = false; public FileState() { } public FileState(File file) throws IOException { this.file = file; directory = file.getCanonicalFile().getParent(); fileName = file.getName(); randomAccessFile = new RandomAccessFile(file.getPath(), "r"); lastModified = file.lastModified(); size = file.length(); } private void setFileFromDirectoryAndName() throws FileNotFoundException { file = new File(directory + File.separator + fileName); if (file.exists()) { randomAccessFile = null; lastModified = file.lastModified(); size = file.length(); } else { deleted = true; } } public File getFile() { return file; } public long getLastModified() { return lastModified; } public long getSize() { return size; } public String getDirectory() { return directory; } public void setDirectory(String directory) throws FileNotFoundException { this.directory = directory; if (fileName != null && directory != null) { setFileFromDirectoryAndName(); } } public String getFileName() { return fileName; } public void setFileName(String fileName) throws FileNotFoundException { this.fileName = fileName; if (fileName != null && directory != null) { setFileFromDirectoryAndName(); } } public boolean isDeleted() { return deleted; } public void setDeleted() { deleted = true; } public boolean hasChanged() { return changed; } public void setChanged(boolean changed) { this.changed = changed; } public long getSignature() { return signature; } public void setSignature(long signature) { this.signature = signature; } public RandomAccessFile getRandomAccessFile() { return randomAccessFile; } public long getPointer() { return pointer; } public void setPointer(long pointer) { this.pointer = pointer; } public int getSignatureLength() { return signatureLength; } public void setSignatureLength(int signatureLength) { this.signatureLength = signatureLength; } public FileState getOldFileState() { return oldFileState; } public void setOldFileState(FileState oldFileState) { this.oldFileState = oldFileState; oldFileState.setMatchedToNewFile(true); } public void deleteOldFileState() { try { oldFileState.getRandomAccessFile().close(); oldFileState = null; } catch (Exception e) { } } public Event getFields() { return fields; } public void setFields(Event fields) { this.fields = fields; } public boolean isMatchedToNewFile() { return matchedToNewFile; } public void setMatchedToNewFile(boolean matchedToNewFile) { this.matchedToNewFile = matchedToNewFile; } @Override public String toString() { return new ToStringBuilder(this).append("fileName", fileName).append("directory", directory) .append("pointer", pointer).append("signature", signature) .append("signatureLength", signatureLength).toString(); } }