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

scala.tools.jline.console.history.FileHistory Maven / Gradle / Ivy

There is a newer version: 2.11.0-M3
Show newest version
/*
 * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
 *
 * This software is distributable under the BSD license. See the terms of the
 * BSD license in the documentation provided with this software.
 */

package scala.tools.jline.console.history;

import scala.tools.jline.internal.Log;

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 java.util.ListIterator;

/**
 * {@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; public FileHistory(final File file) throws IOException { assert file != null; this.file = file; load(file); } public File getFile() { return file; } public void load(final File file) throws IOException { assert file != null; if (file.exists()) { Log.trace("Loading history from: ", file); load(new FileReader(file)); } } public void load(final InputStream input) throws IOException { assert input != null; load(new InputStreamReader(input)); } public void load(final Reader reader) throws IOException { assert reader != null; BufferedReader input = new BufferedReader(reader); String item; while ((item = input.readLine()) != null) { add(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 - 2024 Weber Informatics LLC | Privacy Policy