2016-05-17 5 views
0

Мое назначение - написать программу, которая копирует существующий файл в новый файл. Программа запрашивает у пользователя имя существующего файла, а затем запрашивает имя нового файла (для создания копии существующего). должны быть представленыСоздать новый файл - варианты исключений?

Если файл уже существует, 3 варианта: 1. Выход из программы 2. Заменить существующий файл 3. Введите новое имя файла

В моей папке проекта, у меня есть два файла old.txt и new.txt. Когда я ввожу их, он не указывает, что файл уже существует, он просто просто перезаписывает существующий файл new.txt. Вот мой код:

existingFile = JOptionPane.showInputDialog("Enter the name of the " 
     + "existing file: "); 

    try 
    { 
     file = new File(existingFile); 
     inputFile1 = new Scanner(file); 
    } 
    catch (FileNotFoundException e) 
    { 
     JOptionPane.showMessageDialog(null, existingFile + 
       " does not exist. Exiting program."); 
     System.exit(0); 
    } 

    newFile = JOptionPane.showInputDialog("Enter the name of the " 
      + "new file: "); 
    try 
    { 
     file2 = new File(newFile); 
     createFile = file2.createNewFile(); 
     JOptionPane.showMessageDialog(null, "Copying " + existingFile + 
       " into " + newFile); 
    } 
    catch (FileAlreadyExistsException e) 
    { 
     JOptionPane.showMessageDialog(null, newFile + " already exists."); 
     System.out.println("Choose from the following choices:"); 
     System.out.println("1. Exit the program"); 
     System.out.println("2. Overwrite the existing file"); 
     System.out.println("3. Enter a new name for the file"); 
    } 
    catch (IOException e){ 
     JOptionPane.showMessageDialog(null, "Something"); 
    } 

Можете ли вы сказать мне, почему я не получаю исключения? Благодарю.

ответ

1

According to JavaDoc, File#createNewFile не генерирует исключение, а возвращает false.

Если вы используете последнюю версию Java, вместо этого вы должны использовать Files#createFile (что вызовет исключение). Новый API Files/Path - это очищенная версия для ввода файлов ввода-вывода (унаследованная должна быть сохранена для совместимости).

+0

То же самое с 'new File()'. Он не бросает 'FileNotFoundException'. ИМО, использующий исключения для функциональности, является плохим дизайном. 'if' заявления лучше. Например, файл # exists() 'должен использоваться. – 4castle

+0

@ 4castle: Но «Сканер» выдаст исключение. – Thilo

+0

Понял, спасибо. – Steve

0

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createNewFile%28%29

CreateNewFile только бросить:

IOException - If an I/O error occurred 
SecurityException - If a security manager exists and its SecurityManager.checkWrite(java.lang.String) method denies write access to the file 

и вернется:

true if the named file does not exist and was successfully created; false if the named file already exists 

вы должны изменить ваш

catch (FileAlreadyExistsException e) 

к

if(createFile) 
Смежные вопросы