2
Scanner read=new Scanner(file);

此语句中出现异常“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();
      }
 }
4

5 回答 5

2

问题是程序只是在 catch 语句之后继续。因此,即使您处理了抛出的第一个 FileNotFoundException,file.exists您也会得到第二个,Scanner read=new Scanner(file);而这个没有被处理。

于 2013-04-13T18:47:34.457 回答
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"));
于 2013-04-13T18:54:29.160 回答
1

抓到 后FileNotFoundException,您尝试读取另一个文件并抛出另一个FileNotFoundException

问题在于:

 Scanner read=new Scanner(file);

解决方案是将所有代码放在 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();
        }
于 2013-04-13T18:45:18.237 回答
0

尝试使用文件类的 getAbsolutePath() 来查看您在哪个目录中工作,以及您的文件是否存在于同一目录中。否则考虑给出完整的路径。

于 2013-11-06T08:01:59.003 回答
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);

这里的最后一行显示,在您的 try-catch 之外是您创建Scanner read=new Scanner(file);问题的地方,如果该文件不存在,则没有什么可以阻止扫描仪在尝试访问此文件时崩溃。

你应该把这条线Scanner read=new Scanner(file);放在你的 try-catch 里面,像这样:

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

如果文件不存在,这应该可以防止您的程序崩溃。

于 2013-04-13T19:30:15.337 回答