Cómo copiar archivos en Java

Estoy intentando copiar un archivo en Java y moverlo a una nueva carpeta. Este es el código que he estado usando, pero siempre aparece este error "(Acceso denegado) en el directorio especificado". ¿Hay alguna manera de arreglar esto o una mejor manera de copiar los archivos? Gracia

try{
          File f1 = new File(fpath);
          File f2 = new File("C:/users/peter/documents/foldertest2/hats");
          InputStream in = new FileInputStream(f1);

          //For Append the file.
          //OutputStream out = new FileOutputStream(f2,true);

          //For Overwrite the file.
          OutputStream out = new FileOutputStream(f2);

          byte[] buf = new byte[1024];
          int len;
          while ((len = in.read(buf)) > 0){
            out.write(buf, 0, len);
          }
          in.close();
          out.close();
          System.out.println("File copied.");
        }
        catch(FileNotFoundException ex){
          System.out.println(ex.getMessage() + " in the specified directory.");
          System.exit(0);
        }
        catch(IOException e){
          System.out.println(e.getMessage());      
        }

UPDATE: verifiqué los permisos de la carpeta y todos están abiertos para todos los usuarios y los míos

Respuestas a la pregunta(6)

Su respuesta a la pregunta