2015-11-19 52 views
0

我目前正在尝试在BlueJ中完成一个项目。我有一个ReadWrite类和一个InvalidFileException类。调用自定义异常类

我想从InvalidFileException类中调用toString()方法到writeToFile()方法中的ReadWrite类。

readWrite只能处理以.txt结尾的文件。一旦布尔值完成并找到一个文件不会在.txt结束它应该返回我的自定义异常类。

如果文件类型存在,writeToFile方法将检查布尔值;如果没有,它应该返回我创建的InvalidFileException

我相信我需要在else语句后调用它,但是我没有计算出它的运气。

这是我的代码。

读写类:

public boolean writeToFile() { 
    boolean ok; 

    try { 
     FileWriter writer = new FileWriter(file); 
     { 
      if (file.toLowerCase().endsWith(".txt")) { 
       ok = true; 
       write(); 
      } else { 
       ok = false; 

      } 
     } 

    } catch (IOException e) { 
     ok = false; 
    } 
} 

InvalidFileExceptionClass *****

import java.io.FileNotFoundException; 

public class InvalidFileException extends Exception { 

    /** 
    * Constructor for objects of class InvalidFileException 
    */ 
    public InvalidFileException(String message) { 
     super(message); 
    } 

    public String toString() { 
     return ("Sorry but this system only accepts .txt files"); 
    } 
} 
+1

请编辑您的问题。我不确定你在这里问什么。 – spectacularbob

+1

替换第一个ok = false用throw new YourException(“your message”);不需要定义toString()你可以使用你捕获的异常的getMessage函数 – hsnkhrmn

+0

对不起,我已经编辑了我的问题,方法应该确保要写入的文件以文件扩展名 “.txt”结尾。如果没有,我的“InvalidFileException”应该被抛出。我希望这是有道理的 –

回答

3

有在玩几个问题在这里。

首先,你不要“打电话”例外;你一。这很容易通过throw关键字完成。布尔在这里完全不重要。

接下来,您的自定义例外延伸到Exception,这意味着它已被检查。你要么自己去捕捉它,要么宣布它被抛出。你不想在这里发现它,但你希望调用者来处理它。使用throws关键字也可轻松完成。

最后,您不希望完全忽略toString,完全忽略您传递的信息。将您提供的信息与您的信息结合起来是一个优选的设计,但我会将此决定留给您。

这怎么可能都看会是这样的:

public boolean writeToFile() throws InvalidFileException { 
    try { 
     FileWriter writer = new FileWriter(file); 
     if (file.toLowerCase().endsWith(".txt")) { 
      write(); 
     } else { 
      throw new InvalidFileException("this message is completely ignored"); 
     } 
    } catch (IOException e) { 
     throw e; // something bad has happened and the exception should propagate 
    } 
} 

无论在呼唤这种方法将不得不把它包在自己try...catch

try { 
    readWriteInstance.writeToFile(); 
} catch (InvalidFileException e) { 
    System.out.println(e.toString()); 
} 
1

你需要调用throw new InvalidFileException()当你检测错误,然后捕获该异常。抛出它后立即捕捉它没有意义,你也可以在那里打印错误字符串。您应该在writeToFile方法之外捕获它,这允许您在调用writeToFile的方法中处理异常。