A good answer might be:

Exceptions may be thrown when the files are opened.

Opening the Files

The constructors for FileInputStream and for FileOutputStream throw exceptions which need to be caught. This calls for an outer try{} block:

DataInputStream  instr;
DataOutputStream outstr;
. . . . 
try
{
  instr = 
    new DataInputStream(
      new BufferedInputStream(
        new FileInputStream( args[0] )));
  
  outstr = 
    new DataOutputStream(
      new BufferedOutputStream(
        new FileOutputStream( args[2] )));
  
  try
  {
    int data;
    while ( true )
    {
      data = instr.readUnsignedByte() ;
      outstr.writeByte( data ) ;
    }
  }
  
  catch ( EOFException  eof )
  {
    outstr.close();
    instr.close();
    return;
  }
  
}

The outer try{} block encloses the constructors and the IO loop.

QUESTION 18:

What might go wrong inside the outer try{} block which would cause an exception?