Sure.
// Create a new text file, a copy of the input text file
// but with white space trimmed from the beginning and
// ends of lines.
import java.util.*;
import java.io.*;
public class FileTrimmer
{
public static void main (String[] args)
{
Scanner input = null ;
PrintWriter output = null ;
Scanner user = null ;
String inputFileName, outputFileName;
// Open Files
try
{
// create Scanner for user input
user = new Scanner( System.in );
// prepare the input file
System.out.print("Input File Name: ");
inputFileName = user.nextLine().trim();
File file = new File( inputFileName );
input = new Scanner( file );
// prepare the output file
System.out.print("Output File Name: ");
outputFileName = user.nextLine().trim();
output = new PrintWriter( outputFileName );
}
catch ( IOException iox )
{
System.out.println("Problem Opening Files");
System.out.println( iox.getMessage() );
if ( input != null ) input .close();
if ( output != null ) output.close();
return;
}
// processing loop
try
{
// for each line of input
while( input.hasNextLine() )
{
String line = input.nextLine() ;
output.println( line.trim() );
}
}
catch ( Exception ex )
{
System.out.println("Problem with file I/O");
System.out.println( ex.getMessage() );
}
finally
{
// close the files
if ( input != null ) input .close();
if ( output != null ) output.close();
}
}
}
This program asks the user for an input file name and an output file name. After opening the files, the program reads in a line, trims whitespace off the ends, and writes the line to the output file.
The program uses two try/catch structures in sequence.
It could be written with one big try block,
but sometimes it is nice to keep the blocks small so errors are localized.
Here is an example input file. The display comes from Notepad++ which can display whitespace characters. (Click on the symbol in the tool bar that looks like a paragraph symbol: ¶) This is often very useful.
Here is the output file:
Could a try/catch structure be nested inside one of the blocks of a try/catch structure?