Test Files are belowSolutionimport javaioFile import javaioP

Test Files are below

Solution

import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

class Book implements Comparable<Book>{
   private final String title;
   private final List<String>authorList;
  
   // constructor to initialize the fields
   public Book(String title,final ArrayList<String>theAuthors){
       if(title==null || theAuthors==null || title.length()==0 || theAuthors.size()==0){
           throw new IllegalArgumentException(); // throwing the exception when argument is not valid
       }
      
       this.title=title;
       this.authorList=new ArrayList<>();
       for (String author : theAuthors) {
           authorList.add(author);
       }
   }

   // compareTo method used for sorting
   @Override
   public int compareTo(Book book) {
       //if titles are equal we sort on the basis of first author
       if(this.title.equalsIgnoreCase(book.getTitle())){
           return this.authorList.get(0).compareToIgnoreCase(book.getAuthorList().get(0));
       }
       return this.title.compareToIgnoreCase(book.getTitle());
   }

   public String getTitle() {
       return title;
   }

   public List<String> getAuthorList() {
       return authorList;
   }
  
   // method to get the book title and author detail
   @Override
   public String toString() {
       String bookinfo= \"\\\"\" + this.title + \"\\\",\"+\" by \";
       for(String author:authorList){
           bookinfo+=author+\",\";
       }
       bookinfo=bookinfo.substring(0, bookinfo.lastIndexOf(\",\"));
      
       return bookinfo;
   }
  
   // method to compare the equality between two book object on the basis of title and author
   @Override
   public boolean equals(Object obj) {
       if (obj == this) return true;
if (!(obj instanceof Book)) {
return false;
}

Book book = (Book) obj;
boolean isEqual=true;
if(this.title.equalsIgnoreCase(book.getTitle())){
   if(this.authorList.size()==book.getAuthorList().size()){
       for(String author:this.authorList){
           if(!book.authorList.contains(author)){
               isEqual=false;
           }
       }
   }else{
       isEqual=false;
   }
   return isEqual;
}
  
return false;
   }
}

class Library{
   private List<Book>bookList;
   // constructor to initialize the fields
   public Library(){
       bookList=new ArrayList<>();
   }
  
   // method to add the book
   public boolean add(final Book theBook){
       return this.bookList.add(theBook);
   }
  
   //method to find the books by title
   public ArrayList<Book>findTitles(final String theTitle){
       ArrayList<Book>books=new ArrayList<>();
       if(bookList.size()>0){
           for(Book book:bookList){
               if(book.getTitle().equalsIgnoreCase(theTitle) ){
                   books.add(book);
               }
           }
       }
      
       return books;
   }
  
   // method to sort the list
   public void sort(){
       Collections.sort(this.bookList);
   }
  
   //method return the details of the book
   @Override
   public String toString() {
       String books=\"\";
       if(bookList.size()>0){
           for(Book book:bookList){
               books+=book.toString()+\"\ \ \";
           }
       }
      
       return books;
   }
  
}


public class LibraryDriver {

   public static void main(String[] args) {
   Scanner inputFile=null;
   PrintStream outputFile=null;
   try{
       inputFile=new Scanner(new File(\"D:\\\\LibraryIn1.txt\"));
       outputFile=new PrintStream(new File(\"D:\\\\LibraryOut.txt\"));
   }catch(Exception e){
       System.out.println(\"Difficulties opening the file! \"+e);
       System.exit(1);
   }
     
   ArrayList<String>authors=new ArrayList<>();
   ArrayList<Book>books=new ArrayList<>();
   while(inputFile.hasNext()){
       String title=inputFile.nextLine();
       Book book = new Book(title, getAuthors(inputFile.nextLine()));
       books.add(book);
      
   }
     
   Library library=new Library();
   for(Book book:books){
       library.add(book);
   }
     
   outputFile.println(library);
     
     
   library.sort();
   outputFile.println(\"Prints All Sorted Book List\");
   outputFile.println(library);
   List<Book>booksFound=library.findTitles(\"The Hobbit\");
   outputFile.println(\"By title \\\"The Hobbit\\\"\");
   for(Book book:booksFound){
       outputFile.println(book);
   }
     
   }
  
   //method to get the name of the authors in a list
   public static ArrayList<String> getAuthors(String theAuthors){
       ArrayList<String>authors=new ArrayList<>();
       String [] authorArray=theAuthors.split(\",\");// splitting the name on the basis of delimiter ,
       for(String name:authorArray){
           if(name.indexOf(\"*\")!=-1){
               String []fullname=name.split(\"\\\\*\");//splitting the first name and last name of the author on delimiter *
               authors.add(fullname[0]+\" \"+fullname[1]);
           }else{
               authors.add(name);
           }
       }
       return authors;
   }

}

----------------------------input---------------------------

The Hobbit
Tolkien, J.R.R
The Bluff
A christmas Carol
Dickens, charles
Dougan, Thomas*peters, Paul*Elliot, Sam
The Hobbit
Jay

------------------------------output(LibraryOut.txt)--------------------------------

\"The Hobbit\", by Tolkien, J.R.R
\"The Bluff\", by A christmas Carol
\"Dickens, charles\", by Dougan, Thomas peters, Paul Elliot, Sam
\"The Hobbit\", by Jay

Sorted books
\"Dickens, charles\", by Dougan, Thomas peters, Paul Elliot, Sam
\"The Bluff\", by A christmas Carol
\"The Hobbit\", by Jay
\"The Hobbit\", by Tolkien, J.R.R

By title \"The Hobbit\"
\"The Hobbit\", by Jay
\"The Hobbit\", by Tolkien, J.R.R

Test Files are belowSolutionimport java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; im
Test Files are belowSolutionimport java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; im
Test Files are belowSolutionimport java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; im
Test Files are belowSolutionimport java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; im

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site