For the following I have finished most of this question but am having problem with on method. I
just need the void copyNumbers method filled out. The commented out sections describe what it
needs to do. I have it started. Just need it finished.
package reading_with_exceptions;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Reading_With_Exceptions {
// 1.) Create a Scanner from the inputFilename. Catch exceptions from errors.
// 2.) Read the first String from the file and use it to create a PrintStream
// catching appropriate exceptions
// 3.) Using hasNextInt and nextInt, carefully read the count integer.
// I recommend -1 for a count value if it is bad to indicate reading ALL
// 4.) Use copyNumbers method described below to complete the job
// 5.) Close Scanner and PrintStream objects
// 6.) Call printToScreen to copy the output file to the screen
void process(String inputFilename) {
int number_to_read = 0;
try {
Scanner input = new Scanner(inputFilename);
String outputFilename = input.next();
PrintStream os = new PrintStream(new FileOutputStream(outputFilename));
if ( input.hasNextInt()) {
number_to_read = input.nextInt();
}else {
number_to_read = -1;
}
copyNumbers(input, os, number_to_read);
input.close();
os.close();
printToScreen(outputFilename);
}catch (FileNotFoundException e) {
System.out.println(\"Cannot find file: \" + e);
return;
}
}
// The following routine is called to complete the job of copying integers to
// the output file:
// scan - a Scanner object to copy integers from
// ps - A PrintStream to write the integers to
// numIntsToRead - number of integers to read. A value of -1 ==> read all integers
void copyNumbers(Scanner scan, PrintStream ps, int numIntsToRead) {
// hasNext() can be used to see if the scan object still has data
// Note that hasNextInt() can be used to see if an integer is present
// nextInt() will read an integer
// next() can be used to skip over bad integers
while (scan.hasNext()) {
if (numIntsToRead < 0) {
//print out a complaint message and then read as many integers as you find.
scan.nextInt();
}
if (!scan.hasNextInt()) {
// print a complaint message and skip over the data
scan.next();
}
if ( scan < numIntsToRead) {
// complain but do not abort
}
}
}
public static void main(String[] args) {
Reading_With_Exceptions rwe = new Reading_With_Exceptions();
for (int i=0; i < args.length; i++) {
System.out.println(\"\ \ =========== Processing \"+ args[i] + \" ==========\ \");
rwe.process(args[i]);
}
}
// For the last step, we Copy the contents of the file to the screen
private void printToScreen(String filename) {
Scanner scan = null;
try {
FileInputStream fis = new FileInputStream(filename);
scan = new Scanner(fis);
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
}
catch (FileNotFoundException e) {
System.out.println(\"printToS.
For the following I have finished most of this question but am havin.pdf
1. For the following I have finished most of this question but am having problem with on method. I
just need the void copyNumbers method filled out. The commented out sections describe what it
needs to do. I have it started. Just need it finished.
package reading_with_exceptions;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Reading_With_Exceptions {
// 1.) Create a Scanner from the inputFilename. Catch exceptions from errors.
// 2.) Read the first String from the file and use it to create a PrintStream
// catching appropriate exceptions
// 3.) Using hasNextInt and nextInt, carefully read the count integer.
// I recommend -1 for a count value if it is bad to indicate reading ALL
// 4.) Use copyNumbers method described below to complete the job
// 5.) Close Scanner and PrintStream objects
// 6.) Call printToScreen to copy the output file to the screen
void process(String inputFilename) {
int number_to_read = 0;
try {
Scanner input = new Scanner(inputFilename);
String outputFilename = input.next();
PrintStream os = new PrintStream(new FileOutputStream(outputFilename));
if ( input.hasNextInt()) {
number_to_read = input.nextInt();
}else {
number_to_read = -1;
2. }
copyNumbers(input, os, number_to_read);
input.close();
os.close();
printToScreen(outputFilename);
}catch (FileNotFoundException e) {
System.out.println("Cannot find file: " + e);
return;
}
}
// The following routine is called to complete the job of copying integers to
// the output file:
// scan - a Scanner object to copy integers from
// ps - A PrintStream to write the integers to
// numIntsToRead - number of integers to read. A value of -1 ==> read all integers
void copyNumbers(Scanner scan, PrintStream ps, int numIntsToRead) {
// hasNext() can be used to see if the scan object still has data
// Note that hasNextInt() can be used to see if an integer is present
// nextInt() will read an integer
// next() can be used to skip over bad integers
while (scan.hasNext()) {
if (numIntsToRead < 0) {
//print out a complaint message and then read as many integers as you find.
scan.nextInt();
}
if (!scan.hasNextInt()) {
// print a complaint message and skip over the data
3. scan.next();
}
if ( scan < numIntsToRead) {
// complain but do not abort
}
}
}
public static void main(String[] args) {
Reading_With_Exceptions rwe = new Reading_With_Exceptions();
for (int i=0; i < args.length; i++) {
System.out.println(" =========== Processing "+ args[i] + " ========== ");
rwe.process(args[i]);
}
}
// For the last step, we Copy the contents of the file to the screen
private void printToScreen(String filename) {
Scanner scan = null;
try {
FileInputStream fis = new FileInputStream(filename);
scan = new Scanner(fis);
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
}
catch (FileNotFoundException e) {
System.out.println("printToScreen: can't open: " + filename);
}
finally {
if (scan != null)
scan.close();
}
}// end of printToScreen
4. }
Solution
Please follow the code and comments for description :
CODE :
import java.io.File; // required imports for the code
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Reading_With_Exceptions { // class that runs the code
// 1.) Create a Scanner from the inputFilename. Catch exceptions from errors.
// 2.) Read the first String from the file and use it to create a PrintStream
// catching appropriate exceptions
// 3.) Using hasNextInt and nextInt, carefully read the count integer.
// I recommend -1 for a count value if it is bad to indicate reading ALL
// 4.) Use copyNumbers method described below to complete the job
// 5.) Close Scanner and PrintStream objects
// 6.) Call printToScreen to copy the output file to the screen
void process(String inputFilename) { // method that does the processing of the file
int number_to_read = 0;
File file = new File(inputFilename); // reading it to a file as the input form is a string name
try {
String outputFilename;
PrintStream os;
try (Scanner input = new Scanner(file)) { // checking or reading the unput file
outputFilename = input.nextLine();
os = new PrintStream(new FileOutputStream(outputFilename)); // saving the firstline to a output
filename
if (input.hasNextInt()) { // checking for the data in the file
number_to_read = input.nextInt();
} else {
number_to_read = -1;
5. }
copyNumbers(input, os, number_to_read);
}
os.close(); // closing the stream class
printToScreen(outputFilename); // calling the method to print the data from the output file
} catch (FileNotFoundException e) { // catching the exceptions
System.out.println("Cannot find file: " + e);
}
}
// The following routine is called to complete the job of copying integers to
// the output file:
// scan - a Scanner object to copy integers from
// ps - A PrintStream to write the integers to
// numIntsToRead - number of integers to read. A value of -1 ==> read all integers
void copyNumbers(Scanner scan, PrintStream ps, int numIntsToRead) { // method to copy the
data to the file
// hasNext() can be used to see if the scan object still has data
// Note that hasNextInt() can be used to see if an integer is present
// nextInt() will read an integer
// next() can be used to skip over bad integers
while (scan.hasNext()) { //iterating over the loop to read the data
if (numIntsToRead < 0) {
//print out a complaint message and then read as many integers as you find.
System.out.println("A Message Indicating that reading all the data from the file.");
while(scan.hasNextInt()){
int readNum = scan.nextInt();
ps.print(readNum);
ps.print(" ");
ps.flush();
System.out.println(" Completed Reading the Data.! ");
}
}
if (!scan.hasNextInt()) {
// print a complaint message and skip over the data
System.out.println(" No Data Present in the File to Read.! ");
scan.nextLine();
6. }
}
}
public static void main(String[] args) { // driver method
Reading_With_Exceptions rwe = new Reading_With_Exceptions();
Scanner sc = new Scanner(System.in);
System.out.println("Enter the Number of Files : "); // prompt for the user the enter the total
number of files
int num = sc.nextInt();
System.out.println("Enter the FileName : "); // prompt to enter the file name with extension
String file[] = new String[num];
sc.nextLine();
for (int x = 0; x < num; x++) {
String filename = sc.nextLine();
file[x] = filename;
}
for (String files : file) {
System.out.println(" =========== Processing " + files + " ========== ");
rwe.process(files); //calling the method to process the data files
}
}
// For the last step, we Copy the contents of the file to the screen
private void printToScreen(String filename) { // method to print the data to the screen
Scanner scan = null;
try {
FileInputStream fis = new FileInputStream(filename);
scan = new Scanner(fis);
System.out.println("Data Present in the Output File is : ");
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
} catch (FileNotFoundException e) {
System.out.println("printToScreen: can't open: " + filename);
} finally {
7. if (scan != null) {
scan.close();
}
}
}// end of printToScreen
}
OUTPUT :
Enter the Number of Files :
1
Enter the FileName :
input.txt
=========== Processing input.txt ==========
A Message Indicating that reading all the data from the file.
Completed Reading the Data.!
No Data Present in the File to Read.!
Data Present in the Output File is :
102
3
4
5
6
7
8
9
10
Hope this is helpful.