2013-04-13 4 views
2
Scanner read=new Scanner(file); 

Исключение «FileNotFoundException» встречается в этом утверждении.Я продолжаю получать «FileNotFoundException», хотя я обработал исключение, и файл существует.

import java.util.*; 
    import java.io.*; 

    public class shoppingList { 

     public static void main(String []args)throws IOException { 

       File file=new File("MyList.txt"); 

       try { 

        if(file.exists()==false) 
        throw new FileNotFoundException("the file input doesn't exist"); 
       } 
       catch(FileNotFoundException e){System.out.print(e.getMessage());} 

       //I tried handling the exception but it didn't work 

       Scanner read=new Scanner(file); 


       File outfile=new File("MyReceipt.txt"); 
       FileOutputStream fos=new FileOutputStream(outfile); 
       PrintWriter output=new PrintWriter(fos); 

       while(read.hasNext()) { 
       String item=read.next(); 
       double price=read.nextDouble(); 
       String status=read.next(); 

       output.println("My Receipt: "); 
       output.println("--------------------"); 

       if(status.equals("Done")==true) 
        output.println(item+" "+price); 


       double total=0; 


       total+=price; 
       output.println("--------------------"); 
       output.println("total= "+total); 
      } 

      read.close(); 
      output.close(); 
     } 
} 
+2

Ну, файл не существует там, где вы запускаете программу. Вот почему вы получаете ошибку. Чтобы убедиться, что путь к файлу должен быть указан, прокомментируйте весь код внутри метода 'main' и добавьте этот новый файл (« something.txt »). CreateNewFile();' запустите его, и вы увидите это новое созданный файл (и место, где вы должны поместить файл * MyList.txt *). –

+0

@ LuiggiMendoza - это хорошая идея. В качестве альтернативы OP должен попробовать 'System.out.println (новый файл (« MyList.txt »). GetAbsolutePath());' для отладки, где программа ищет файл. – sgp15

+0

@ sgp15 не будет работать, если файл * MyList.txt * не существует ... –

ответ

1

После того, как вы поймали FileNotFoundException, вы пытаетесь прочитать другой файл и бросает другой FileNotFoundException

Проблема заключается в строке:

Решение поместить весь код в блоке try:

File file=new File("MyList.txt"); 

try{ 

    if(file.exists()==false) 
     throw new FileNotFoundException("the file input doesn't exist"); 

     //i tried handling the exception but it didn't work 

     Scanner read; 
      read = new Scanner(file); 




     File outfile=new File("MyReceipt.txt"); 
     FileOutputStream fos; 
      fos = new FileOutputStream(outfile); 

     PrintWriter output=new PrintWriter(fos); 

     while(read.hasNext()){ 
      String item=read.next(); 
      double price=read.nextDouble(); 
      String status=read.next(); 

      output.println("My Receipt: "); 
      output.println("--------------------"); 

      if(status.equals("Done")==true) 
       output.println(item+" "+price); 


      double total=0; 


      total+=price; 
      output.println("--------------------"); 
      output.println("total= "+total); 
     } 
     read.close(); 
     output.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
+0

И решение ... –

+0

Извините, но это не решение проблемы обработки «FileNotFoundException», но не реальной проблемы (указано в заголовке вопроса): * и файл существует *. Обратитесь к [sgp15's answer] (http://stackoverflow.com/a/15991624/1065197), чтобы увидеть возможное решение. –

+0

Как я понимаю, он пытается защитить код от FileNotFoundException и не удалось. – Joan

2

Проблема заключается в том, что программа просто продолжается после выписки. Поэтому, даже если вы обрабатываете первое исключение FileNotFoundException, которое выбрасывается file.exists, вы получаете второй код Scanner read=new Scanner(file);, и этот не обрабатывается.

1

new File("MyList.txt") попытается найти файл в текущем каталоге.

Текущий каталог зависит от среды, в которой работает программа. Например, если программа запускается в Eclipse IDE, проект Java является текущим каталогом.

Попробуйте указать абсолютный путь. Например. C:\\workspace\\project\\MyList.txt.

В качестве альтернативы поместите файл под исходное дерево или пакет и откройте путь InputStream по пути к классам. Например, если он помещен в пакет с именем my.foo.shopping, вы можете напрямую создать Scanner следующим образом.

Scanner read=new Scanner(shoppingList.class.getResourceAsStream("/my/foo/shoppin/MyList.txt")); 
0
try { 

       if(file.exists()==false) 
       throw new FileNotFoundException("the file input doesn't exist"); 
      } 
      catch(FileNotFoundException e){System.out.print(e.getMessage());} 

      //I tried handling the exception but it didn't work 

      Scanner read=new Scanner(file); 

последняя строка здесь показывает, что за пределами вашего примерки улова, где вы создаете Scanner read=new Scanner(file); проблема в том, что, если файл не существует, то ничто не мешает сканера от сбоев при он пытается получить доступ к этому файлу.

Вы должны поместить строку Scanner read=new Scanner(file); внутри вашего примерки уловом, например, так:

  try { 
      if(file.exists()){ 
       Scanner read=new Scanner(file); 
      } 
      else if(file.exists()==false) 
       throw new FileNotFoundException("the file input doesn't exist"); 
      } 
     } 

Это должно помешать вашей программе сбой, если файл не существует.

0

попробуйте использовать getAbsolutePath() класса файлов, чтобы увидеть, в какой каталог вы работаете, и ваш файл присутствует в том же каталоге или нет. Иначе подумайте о том, чтобы дать полный путь.

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