为什么我一直得到“必须被抓或被宣布被抛出”的错误?

时间:2012-03-16 08:31:45

标签: java filenotfoundexception

这是我的代码

import java.io.*;
import java.util.*;
import java.util.Scanner;
import java.io.PrintWriter;

public class EncryptionDecryption {

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

int z = getRandom();
boolean luck = true;

while(luck == true){
String codeString = getString();
System.out.println(codeString);

char[] enCharArray = encrypt(codeString, z);
String encryptedString = new String(enCharArray);
System.out.println(encryptedString);

char[] deCharArray = decrypt(encryptedString, z);
String decryptedString = new String(deCharArray);
System.out.println(decryptedString);
putString(encryptedString);

if(codeString.length() == 0)
luck = false;
}
}

static String getString(){
Scanner input = new Scanner(new File(" "));
String codeString = input.next();
return codeString;
}

static void putString (String finalString){
PrintWriter work = new PrintWriter("EncryptedDocument.txt");
work.print(finalString + " ");
work.close();
}

static char[] encrypt(String encryptString, int z){
char[] codeChar = encryptString.toCharArray();
char[] enCharArray;
enCharArray = new char[codeChar.length];
for(int i = 0; i < codeChar.length; i++){
int x = codeChar[i];
int enInt = encryptChar(x, z);
char enChar = (char)enInt;
enCharArray[i] = enChar;
if(x == 32){
enInt = 32;
enChar = (char)enInt;
enCharArray[i] = enChar;
}
}
return enCharArray;
}

static char[] decrypt(String decryptString, int z){
char[] deCodeChar = decryptString.toCharArray();
char[] deCharArray;
deCharArray = new char[deCodeChar.length];
for(int i = 0; i < deCodeChar.length; i++){
int x = deCodeChar[i];
int deInt = decryptChar(x, z);
char deChar = (char)deInt;
deCharArray[i] = deChar;
if(x == 32){
deInt = 32;
deChar = (char)deInt;
deCharArray[i] = deChar;
}
}
return deCharArray;
}

static int encryptChar(int x, int z){
int y = 'A';
int enInt = (x - y + z) % 26 + y;
return enInt;
}

static int decryptChar(int x, int z){
int y = 'A';
int deInt = (x - y + 104 - z) % 26 + y;
return deInt;
}

static int getRandom(){
int encryptMethod = 0;
while(encryptMethod == 0){
Random encrypt = new Random();
encryptMethod = encrypt.nextInt(96);
}
return encryptMethod;
}

}

我在尝试编译时不断收到这些错误:

EncryptionDecryption.java:32: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
Scanner input = new Scanner(new File(" "));
                ^
EncryptionDecryption.java:38: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
PrintWriter work = new PrintWriter("EncryptedDocument.txt");
                   ^
2 errors

6 个答案:

答案 0 :(得分:3)

因为你调用一个方法来声明它抛出一个FileNotFoundException,并且你没有捕获异常,也没有声明封闭方法抛出它。这在Java中是不允许的。必须捕获所有已检查的异常,或者在方法的throws子句中声明:

static String getString() throws FileNotFoundException {

如果您可以处理异常并执行一些有意义的操作,使程序继续按预期工作,那么请捕获异常。如果你不能在这个方法中处理它,那么让你的方法的调用者为你处理它,并通过在throws子句中声明它来传播它。

答案 1 :(得分:1)

在方法getString()中您正在创建一个new File(),它会抛出FileNotFoundException。必须通过将扫描器代码块包含在FileNotFoundException块中或由方法抛出的声明来捕获此try-catch。同样的事情适用于putString (String finalString)方法。

您的代码应为

static String getString(){
        Scanner input;
        try {
            input = new Scanner(new File(" "));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String codeString = input.next();
        return codeString;
    }

static void putString (String finalString){
        PrintWriter work;
        try {
            work = new PrintWriter("EncryptedDocument.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        work.print(finalString + " ");
        work.close();
    }

答案 2 :(得分:0)

注意你有......

public static void main(String[] args) throws java.io.IOException

在那里“投掷”线?这是告诉Java当IOException发生时,它应该传递给任何名为main()的东西。

Java要求您针对可能引发的任何可能异常执行此操作。这些错误消息告诉您的是,您的代码中可能会引发另外两种类型的异常;您需要指定它们被抛出(或通过try / catch块自行处理它们。)

答案 3 :(得分:0)

尝试添加

throws java.io.IOException

任何使用文件IO的方法。我认为它会解决你的问题

答案 4 :(得分:0)

因为FileNotFoundExceptionchecked Exception,这意味着在Java中你必须在它们发生时对它们做些什么。

您有两种方法可以处理已检查的例外:

  • 抓住他们并与他们合作try{ } catch(FileNotFoundException e) { //do something with e}

  • 重新抛出它们,这意味着添加行throws FileNotFoundException添加方法签名的结尾

答案 5 :(得分:0)

在上面的代码中Scanner input = new Scanner(new File(" "));表示您正在尝试打开一个文件。当您尝试打开它时,这可能会也可能不可用。如果在该处不可用,则抛出异常time.Hence总是建议相应地处理这个代码。 must be caught or declared to be thrown表示我们可能期望上面解释的异常可以被代码抛出,因此必须处理。异常处理使用

完成

1.使用try catch

try{
ur code that generates exception
}
 catch{
handle exception
}

这说明了first part of the exception you got "must be caught"

2.use throw

当你不想在这里处理异常时,可以将它抛给调用它的方法。调用方法必须处理这个异常。

meth1() 
{
meth2();
}
meth2()throws Exception
{
try{
.....
.....
}
catch(Exception e)
{
...
u will not handle it here;
throw e; //exception thrown to the calling method meth1()
}
}

这说明了

second part of the exception "declared to be thrown"