1  import java.io.File;
  2  import java.io.FileNotFoundException;
  3  import java.io.PrintWriter;
  4  import java.util.Scanner;
  5  
  6  /**
  7     This program reads a file whose lines contain items and prices,
  8     like this:
  9     item name 1: price 1
 10     item name 2: price 2
 11     ...
 12     Each item name is terminated with a colon.
 13     The program writes a file in which the items are left-aligned
 14     and the prices are right-aligned. The last line has the total
 15     of the prices.
 16  */
 17  public class Items
 18  {
 19     public static void main(String[] args) throws FileNotFoundException
 20     {
 21        // Prompt for the input and output file names
 22  
 23        Scanner console = new Scanner(System.in);
 24        System.out.print("Input file: ");
 25        String inputFileName = console.next();
 26        System.out.print("Output file: ");
 27        String outputFileName = console.next();
 28  
 29        // Construct the Scanner and PrintWriter objects for reading and writing
 30  
 31        File inputFile = new File(inputFileName);
 32        Scanner in = new Scanner(inputFile);
 33        PrintWriter out = new PrintWriter(outputFileName);
 34  
 35        // Read the input and write the output
 36  
 37        double total = 0;
 38        
 39        // We read a line at a time since there may be spaces in the item names
 40        while (in.hasNextLine()) 
 41        {
 42           String line = in.nextLine();
 43           boolean found = false;
 44           String item = "";
 45           double price = 0;
 46           for (int i = 0; !found && i < line.length(); i++)
 47           {
 48              char ch = line.charAt(i);
 49              if (ch == ':')
 50              {
 51                 found = true;
 52                 item = line.substring(0, i + 1);
 53                 price = Double.parseDouble(line.substring(i + 1).trim());
 54                 total = total + price;
 55              }
 56           }
 57           // If no colon was found, we skip the line
 58           if (found)
 59           {
 60              out.printf("%-20s%10.2f\n", item, price);
 61           }
 62  	  
 63        }
 64  
 65        out.printf("%-20s%10.2f\n", "Total:", total);
 66  
 67        in.close();
 68        out.close();
 69     }
 70  }