Java 对文件使用BufferedReader时FileNotFoundException

Java 对文件使用BufferedReader时FileNotFoundException,java,file,bufferedreader,ioexception,filenotfoundexception,Java,File,Bufferedreader,Ioexception,Filenotfoundexception,我对如何使用Java进行基本的文件读取感到非常困惑。很多混合信号 我尝试过几种不同的方法,每次都会得到一个未发现的异常。我已使用设置为当前路径的文件对象进行了检查,以打印当前目录,并且我确实在试图打开的文件所在的目录中。权限设置为每个人都可以阅读。我不确定发生了什么: BufferedReader infixLines = new BufferedReader ( new FileReader ( "input.infix" )); 这是抛出错误的行,因此使用infixline的每个连续行也会

我对如何使用Java进行基本的文件读取感到非常困惑。很多混合信号

我尝试过几种不同的方法,每次都会得到一个未发现的异常。我已使用设置为当前路径的文件对象进行了检查,以打印当前目录,并且我确实在试图打开的文件所在的目录中。权限设置为每个人都可以阅读。我不确定发生了什么:

BufferedReader infixLines = new BufferedReader ( new FileReader ( "input.infix" ));
这是抛出错误的行,因此使用infixline的每个连续行也会抛出错误

我也尝试过使用FileInputStream,但也遇到了同样的错误

也就是说,只是做而已

File file = new File("input.infix");
if ( file.exists() )
    System.out.println( "Exists" );
确实有效

非常困惑

编辑:(Stacktrace?)


异常跟踪表明您的代码

BufferedReader infixLines = new BufferedReader ( new FileReader ( "input.infix" ));
如果文件不存在,可能会抛出
FileNotFoundException
IOException
,因此它希望您采取措施来处理这种可能性

最简单的方法是将文件读取代码包装在
try catch
块中,如下所示

try {
    BufferedReader infixLines = new BufferedReader ( new FileReader ( "input.infix" ));
    // other reading code here
}
catch (FileNotFoundException e){
    System.out.println(e);
}
catch (IOException e){
    System.out.println(e);
}
异常并不是说找不到文件,而是说如果文件不存在,代码将如何处理这种情况

最后,在
catch
块中,您可能希望做的不仅仅是
System.out.println()
。例如,在GUI程序中,您可能会显示一条弹出消息,告诉用户该文件不存在。

这一行

BufferedReader infixLines = new BufferedReader (new FileReader("input.infix"));

搜索文件:
input.infix
,如果未找到该文件,则将返回
FileNotFoundException
exception。确保
input.infix
java文件位于同一目录中
这是一个编译错误,而不是运行时异常

您需要将与文件相关的调用包装在try-catch块中,并处理
FileNotFounceException
IOException

尝试此操作

String fileName = "input.infix";
File fil = new File(fileName);
String filePath = fil.getAbsolutePath();
BufferedReader infixLines = new BufferedReader(new FileReader(filePath));

你能把堆栈跟踪添加到问题中吗?您是否尝试过这样创建它:
newfilereader(新文件(“input.infix”)您使用的是哪种操作系统?您确定已设置权限以便可以读取文件吗?你能在程序外的文本编辑器中加载文件吗?运行在远程linux服务器上。像梦一样加载到vim中。我很确定每个人都可以读取权限。上面的“堆栈跟踪”看起来很像编译器错误消息,而不是堆栈跟踪。你确定你问的问题是对的吗?仅供参考-你描述的代码行没有抛出错误。“抛出错误”是一个运行时概念,意味着代码可以编译并运行,但在运行时失败。您的错误是您的程序不是合法的Java。作为一般规则,试着区分编译时错误(程序根本不会编译和运行)和运行时错误(程序会编译,但不会做正确的事情)。如果他使用Java 7,他也可以通过管道处理异常:
catch(FileNotFoundException | IOException e){
我按照您的建议包装了它,稍后(在尝试捕获之后)当我实际使用BufferedReader对象时它找不到符号。向我暗示它只是在try块中失败了,当然也没有打印到控制台。只是更多的错误。我尝试在try语句外声明infixline,然后在try语句内设置它,这只是混淆了情况。您需要将所有文件读取代码都放在
try中部分,因此,如果文件可以由
BufferedReader
打开,它只执行所有文件读取访问。基本上,尝试访问
Infixline
的所有内容都需要位于
try
部分。那么,就这样做了!谢谢,我当然不喜欢这种方法。有没有一种侵入性较低的方法或者是编码员,这样你就不必用异常处理来包装它了?我从来没有遇到过如此情绪化的文件I/O方式。我一般认为,这并不都是阳光和雏菊,但从我主要的Python/C/C++背景来看,这有点荒谬。见鬼,即使是C#对文件I/O来说也不是如此冗长。异常处理非常重要——你是ally需要确保您正确处理可能产生异常的情况。如果没有异常处理,您的程序将处于未定义状态,并且不知道如何操作。异常处理尝试预测可能发生的问题,并允许您很好地处理这些问题,从而使程序不会简单地崩溃。
String fileName = "input.infix";
File fil = new File(fileName);
String filePath = fil.getAbsolutePath();
BufferedReader infixLines = new BufferedReader(new FileReader(filePath));