Java 即使文件存在,FileNotFoundException仍然存在

Java 即使文件存在,FileNotFoundException仍然存在,java,file-io,filenotfoundexception,Java,File Io,Filenotfoundexception,我回顾了关于这个问题的其他答案,并尝试了他们的建议,但没有成功。在我的程序中,我有以下五行代码: String curDir = System.getProperty("user.dir"); System.out.println(curDir); File f = new File("/home/brian/workspace/Color Sampler/src/Data.txt"); if(f.exists() && !f.isDirecto

我回顾了关于这个问题的其他答案,并尝试了他们的建议,但没有成功。在我的程序中,我有以下五行代码:

    String curDir = System.getProperty("user.dir");
    System.out.println(curDir);

    File f = new File("/home/brian/workspace/Color Sampler/src/Data.txt");
    if(f.exists() && !f.isDirectory()) { System.out.println("success"); }

    Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt"));
前四行产生输出:

/home/brian/workspace/Color Sampler
success
据我所知,该文件位于多个位置:

/home/brian/workspace/Color Sampler
/home/brian/workspace/Color Sampler/src
/home/brian/workspace/Color Sampler/bin
尽管如此,我还是有例外。我已经用上面三个文件路径都试过了。该文件也没有在任何地方打开,因此应该是可读的。我已经花了一个多小时的时间在一个简单的文件名规范上,现在我简直要发疯了

例外情况如下:

Exception in thread "AWT-EventQueue-1" java.lang.Error: Unresolved compilation problem: 
Unhandled exception type FileNotFoundException

at WindowDestroyer.windowOpened(WindowDestroyer.java:46)
at java.awt.Window.processWindowEvent(Window.java:1972)
at javax.swing.JFrame.processWindowEvent(JFrame.java:290)
at java.awt.Window.processEvent(Window.java:1933)
at java.awt.Component.dispatchEventImpl(Component.java:4649)
at java.awt.Container.dispatchEventImpl(Container.java:2103)
at java.awt.Window.dispatchEventImpl(Window.java:2588)
at java.awt.Component.dispatchEvent(Component.java:4475)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:675)
at java.awt.EventQueue.access$300(EventQueue.java:96)
at java.awt.EventQueue$2.run(EventQueue.java:634)
at java.awt.EventQueue$2.run(EventQueue.java:632)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:119)
at java.awt.EventQueue$3.run(EventQueue.java:648)
at java.awt.EventQueue$3.run(EventQueue.java:646)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:645)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

您可能没有足够的权限访问该文件


首先尝试调用File对象上的
exists()
,它应该返回
true

您的问题不是找不到文件,而是您没有处理可能的
FileNotFoundException

将代码更改为:

try (Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt"))) {
    // read file and all
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
或者在方法中添加一个
throws
子句:

public void method() throws FileNotFoundException {

}

我相信你的问题的关键是“未解决的编译错误”。您的项目是在Eclipse中生成的吗?如果是这样,根据,Eclipse可以生成不应编译的代码,因此在运行时会出现错误

所有打开的操作都可能生成异常。检查文档并更正代码,并使用适当的
try-catch
子句对其进行修改

试试这个:

try {
 Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt"));
} catch (Exception ex) {
}
如果它有效,那么这就是方向


附录:有关此问题的更多信息,请访问。

您想对该文件做什么?Data.txt是否真的有Capital D?另外,如果只创建一个新文件,而不先将其输入扫描仪,会发生什么情况?你能得到一些文件信息吗,还是已经失败了?如果你能显示你得到的异常,那也很好。它确实有一个大写的D。我修改了我的问题,加入了eception。你说创建一个新文件是什么意思?我是Java新手,对其文件io非常不熟悉。我修改了我的问题,将其包括在内。也许是我的电脑在捉弄我?