当行超过80时抛出异常(java)

时间:2015-07-23 17:57:32

标签: java exception try-catch

我正在尝试编写一个程序,它将java文件作为输入(在程序中指定)并逐行读取。如果一行超过80个字符,则会抛出异常,如果抛出异常,程序将打印太长的行,并继续执行该程序的其余部分。

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

public class LinePolice
{
   public static void main(String[] args) throws LinePoliceTooLongException
   {
      try
      {
         File file = new File("NameOrientation.java");
         FileReader fileReader = new FileReader(file);
         BufferedReader bufferedReader = new BufferedReader(fileReader);
         StringBuffer stringBuffer = new StringBuffer();
         String line;
         while ((line = bufferedReader.readLine()) != null)
         {
            LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
            if (line.length() > 80)
               throw x;
         }
         fileReader.close();
      }
      catch (IOException e)
      {

      }
   }
}


public class LinePoliceTooLongException extends Exception
{
   LinePoliceTooLongException(String message)
   {
      super(message);
   }
}

当我使用以下文件运行它时,它会选择长于80的第一行,但不会继续通过该文件。

import java.awt.*;
import javax.swing.*;

public class NameOrientation
{
   public static void main(String[] args)
   {
      JFrame frame = new JFrame("NameOrientation");

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      JPanel primary = new JPanel();
      primary.setBackground(Color.green);
      primary.setPreferredSize(new Dimension(250, 250));

      JLabel label1 = new JLabel("********************************************************");
      JLabel label2 = new JLabel("**************************************************************");

      primary.add(label1);
      primary.add(label2);

      frame.getContentPane().add(primary);
      frame.pack();
      frame.setVisible(true);
   }
}   

如果有可能,有人可以告诉我哪里出错了,我可以做些什么来尝试让它发挥作用。感谢您的帮助

2 个答案:

答案 0 :(得分:2)

            while ((line = bufferedReader.readLine()) != null)
            {
                LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
                try{
                    if (line.length() > 80)
                       throw x;
                }catch(LinePoliceTooLongException le){
                    System.out.println("Line:"+line);
                }
             }

由于您从while循环中抛出LinePoliceTooLongException而未捕获它,因此您无法继续其余的行。你必须在while循环中捕获异常。

答案 1 :(得分:0)

在您的代码中,您正在创建例外

 LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
扔掉它而你却没有抓住它。这就是你的程序没有正确完成的原因。我想你现在已经明白了。

要解决此问题,您可以添加catch块来捕获刚刚抛出的异常。如果你这样做,那将是一个非常可怕的事情,抛出一个异常并在它被抛出后立即捕获它没有任何意义。无论你想在catch block做什么,都要在if内做,​​不要抛出任何异常。

 while ((line = bufferedReader.readLine()) != null)
     {
       if (line.length() > 80){
          System.out.println("Line is more than 80 characters and can not be processed: " + line);
     }
 }