2014-11-19 1 views
0

В следующем SSCCE, я не получаю FileNotFoundException даже если удалить этот файл из данного местоположения/пути, т.е. "D:\\Eclipse Workspaces\\SAMPLES AND OTHER SNIPPETS\\SoapCallResults.txt"Java PrintWriter: Почему мы обрабатываем FileNotFoundException, если файл автоматически создается, если не найден?

Скорее PrintWriter, кажется, создает файл, если он не найден.

Если Printwriter создает файл, если он не найден, то почему мы пытаемся справиться с FileNotFoundException (компилятор жалуется, если мы не окружают его с try/catch или добавить пункт throws), когда он никогда не будет выброшен ?

package com.general_tests; 

import java.io.FileNotFoundException; 
import java.io.PrintWriter; 

public class PrintWriterFileNotFoundExceptionTest { 

    public static void main(String[] args) { 
     String myName = "What ever my name is!"; 
     PrintWriter printWriter = null; 
     try { 
      printWriter = new PrintWriter("D:\\Eclipse Workspaces\\SAMPLES AND OTHER SNIPPETS\\SoapCallResults.txt"); 
      printWriter.println(myName); 
     } catch (FileNotFoundException e) { 
      System.out.println("FILE NOT FOUND EXCEPTION!"); 
      e.printStackTrace(); 
     } finally { 
      if (printWriter != null) { printWriter.close(); } 
     } 

    } 

} 
+2

Documentations говорит: FileNotFoundException - Если данная строка не обозначает существующий, доступный для записи обычный файл, а новый обычный файл этого имени не может быть создан или если возникает некоторая другая ошибка при открытии или создании файла. –

+1

. Разрешения, среди прочего, могут помешать писателю создать файл. – JonK

+0

Downvoter: Скажите, пожалуйста, причину для downvote, иначе нет НИКАКОЙ возможности ПОВЫШЕНИЯ УЛУЧШЕНИЯ! – Solace

ответ

2

Замените Eclipse Workspaces на свой путь с foo и посмотрите, есть ли у вас исключение. Сам файл может быть создан, но не весь путь над ним.

Вы также можете оставить путь таким, какой он есть, но установите для него только доступные для чтения, скрытые и системные атрибуты. ОС не сможет ни писать, ни создавать ее.

Другой вариант: изменить ACL файла, чтобы ваш пользователь не имел права на запись.

Есть еще много.

1

FIleNotFoundException - проверенное исключение. Вам нужно обрабатывать эти исключения, если ваш кодовый блок их бросает. Для исключенных типов исключений вам не нужно обрабатывать (не обязательно). Можете ли вы действительно гарантировать, что файл создан, но не поврежден или запись на диске не повреждена? Также посмотрите на это - Java: checked vs unchecked exception explanation.

Главное, что ваш конструктор бросает FileNotFoundException (смотрите здесь - https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#print%28char%29), который вы должны поймать (потому что он проверен).

Советы - Для Eclipse попробуйте посмотреть, что ctrl + SPACe показывает об объектном методе. Если ваш JavaDoc находится в нужном месте, вы увидите все объяснения того, что делает этот метод, включая бит «Throws: SomeException». Это то, что вам нужно искать при вызове метода (т. Е. Нужен ли вам блок catch catch).

+0

Спасибо, что поделились советом. Это очень полезно. – Solace

3

FileNotFoundException - проверенное исключение, которое просто переводит, что вам придется либо поймать его, либо добавить его в предложение throws.

Я надеюсь, что это ответ на ваш вопрос о том, почему мы на самом деле это нужно, даже если файл создается, если не present-

От javadoc -

FileNotFoundException - If the given file object does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file

 Смежные вопросы

  • Нет связанных вопросов^_^