/**************************************************************************************************
* Program Name: Programming Project 5.7: Bookshelf
* Class Name: BookshelfFilestore
* Author: Terry Weiss
* Date Written: October 15, 2015
* Program Description:
* This class loads and saves all instance data for a book that will be used in `Bookshelf`.
**************************************************************************************************/
package pp5_7;
//import Book
//import Bookshelf
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
*
* @author Terry
*/
public final class BookshelfFilestore {
private static final String DEFAULT_SHELF_FILENAME = "shelf.bl";
private static File shelfFile;
private static PrintWriter writer;
private static List<Book> shelf;
BookshelfFilestore() throws IOException, FileNotFoundException {
shelfFile = new File(DEFAULT_SHELF_FILENAME);
writer = new PrintWriter(new FileWriter(DEFAULT_SHELF_FILENAME));
shelf = new ArrayList<>();
}
BookshelfFilestore( String filename ) throws IOException, FileNotFoundException {
shelfFile = new File(filename);
writer = new PrintWriter(new FileWriter(filename));
shelf = new ArrayList<>();
if (shelfFile.exists()) {
loadBookshelf();
}
}
BookshelfFilestore( List<Book> booklist ) throws IOException, FileNotFoundException {
shelfFile = new File(DEFAULT_SHELF_FILENAME);
writer = new PrintWriter(new FileWriter(DEFAULT_SHELF_FILENAME));
shelf = booklist;
}
BookshelfFilestore( List<Book> booklist, String filename )
throws IOException, FileNotFoundException
{
shelfFile = new File(filename);
writer = new PrintWriter(new FileWriter(filename));
shelf = booklist;
if (shelfFile.exists()) {
saveBookshelf();
}
}
BookshelfFilestore( Bookshelf bookshelf ) throws IOException, FileNotFoundException {
shelfFile = new File(bookshelf.getName() + ".bl");
writer = new PrintWriter(new FileWriter(bookshelf.getName() + ".bl"));
shelf = bookshelf.getBookList();
}
BookshelfFilestore( Bookshelf bookshelf, String filename )
throws IOException, FileNotFoundException
{
shelfFile = new File(filename);
writer = new PrintWriter(new FileWriter(filename));
shelf = bookshelf.getBookList();
if (shelfFile.exists()) {
saveBookshelf();
}
}
/**
* Updates the working file using the specified filename.
*
* @param filename Relative path of new file to be used
* @return <tt>true</tt> if new file currently exists
* @throws IOException
*/
public boolean useFile( String filename ) throws IOException {
shelfFile = new File(filename);
return shelfFile.exists();
}
/**
* Writes all {@link pp5_7.Book}s to the current file.
*
* @return <tt>true</tt> if any books were saved
*/
public boolean saveBookshelf() {
if (shelf.isEmpty()) {
return false;
}
else {
for (Book book : shelf) {
writer.write(book.getTitle() + "\n");
writer.write(book.getPages() + "\n");
writer.write(book.getAuthor() + "\n");
writer.write(book.getGenre() + "\n");
writer.write("\n");
writer.flush();
}
return true;
}
}
/**
* Replaces current booklist with all the {@link pp5_7.Book}s from the current working file.
*
* @return List of Books loaded
* @throws FileNotFoundException
*/
public List<Book> loadBookshelf() throws FileNotFoundException {
Scanner fileReader = new Scanner(shelfFile);
fileReader.useDelimiter("\n\n");
shelf.clear();
while (fileReader.hasNext()) {
String bookStr = fileReader.next();
Scanner bookReader = new Scanner(bookStr);
String title, author, genre;
int pages;
// For each book in the file's list
for (int i = 0; bookReader.hasNext(); i++) {
title = bookReader.nextLine();
pages = Integer.parseInt(bookReader.nextLine());
author = bookReader.nextLine();
genre = bookReader.nextLine();
shelf.add(new Book(title, pages, author, genre));
}
}
return shelf;
}
public static void main( String[] args ) throws IOException
{
List<Book> list = new ArrayList<>();
list.add(new Book("Pizza Cookbook", 751, "Pizza Chef", "Non-fiction"));
list.add(new Book("Space Cowboys", 152, "Somebody Cool", "Sci-Fi"));
list.add(new Book("Space Cadets", 852, "Somebody Cool", "History"));
list.add(new Book("Cable News", 659, "Johny", "Non-fiction"));
list.add(new Book("Pizza Cookbook", 751, "Pizza Chef", "Non-fiction"));
BookshelfFilestore bfs = new BookshelfFilestore(list);
bfs.saveBookshelf();
List<Book> list2 = bfs.loadBookshelf();
for (Book book : list2) {
System.out.println(book.displayDetails() + "\n");
}
}
}
Comments