jline.console.history.FileHistory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of driver-cql-shaded Show documentation
Show all versions of driver-cql-shaded Show documentation
A Shaded CQL ActivityType driver for http://nosqlbench.io/
/*
* Copyright (c) 2002-2016, the original author or authors.
*
* This software is distributable under the BSD license. See the terms of the
* BSD license in the documentation provided with this software.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package jline.console.history;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.Flushable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;
import jline.internal.Log;
import static jline.internal.Preconditions.checkNotNull;
/**
* {@link History} using a file for persistent backing.
*
* Implementers should install shutdown hook to call {@link FileHistory#flush}
* to save history to disk.
*
* @author Jason Dillon
* @since 2.0
*/
public class FileHistory
extends MemoryHistory
implements PersistentHistory, Flushable
{
private final File file;
/**
* Load a history file into memory, truncating to default max size.
*/
public FileHistory(final File file) throws IOException {
this(file, true);
}
/**
* Create a FileHistory, but only initialize if doInit is true. This allows
* setting maxSize or other settings; call load() before using if doInit is
* false.
*/
public FileHistory(final File file, final boolean doInit) throws IOException {
this.file = checkNotNull(file).getAbsoluteFile();
if (doInit) {
load();
}
}
/**
* Load history from file, e.g. if using delayed init.
*/
public void load() throws IOException {
load(file);
}
public File getFile() {
return file;
}
public void load(final File file) throws IOException {
checkNotNull(file);
if (file.exists()) {
Log.trace("Loading history from: ", file);
FileReader reader = null;
try{
reader = new FileReader(file);
load(reader);
} finally{
if(reader != null){
reader.close();
}
}
}
}
public void load(final InputStream input) throws IOException {
checkNotNull(input);
load(new InputStreamReader(input));
}
public void load(final Reader reader) throws IOException {
checkNotNull(reader);
BufferedReader input = new BufferedReader(reader);
String item;
while ((item = input.readLine()) != null) {
internalAdd(item);
}
}
public void flush() throws IOException {
Log.trace("Flushing history");
if (!file.exists()) {
File dir = file.getParentFile();
if (!dir.exists() && !dir.mkdirs()) {
Log.warn("Failed to create directory: ", dir);
}
if (!file.createNewFile()) {
Log.warn("Failed to create file: ", file);
}
}
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream(file)));
try {
for (Entry entry : this) {
out.println(entry.value());
}
}
finally {
out.close();
}
}
public void purge() throws IOException {
Log.trace("Purging history");
clear();
if (!file.delete()) {
Log.warn("Failed to delete history file: ", file);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy