Java File可以找到该文件,但FileReader可以';T

Java File可以找到该文件,但FileReader可以';T,java,file,filereader,Java,File,Filereader,我正在尝试用java读取一个.txt文件。 我将文件放在项目的根文件夹中 当我这样做时: URL=getClass().getResource(“/test.txt”); System.out.println(url); File File=新文件(url.getPath()); System.out.println(file.getAbsolutePath()); 我找到了正确的归路。 但是当我想在文件阅读器中使用该文件时,它找不到该文件 Scanner scan=new Scanner(n

我正在尝试用java读取一个.txt文件。 我将文件放在项目的根文件夹中

当我这样做时:

URL=getClass().getResource(“/test.txt”);
System.out.println(url);
File File=新文件(url.getPath());
System.out.println(file.getAbsolutePath());
我找到了正确的归路。 但是当我想在文件阅读器中使用该文件时,它找不到该文件

Scanner scan=new Scanner(new BufferedReader(new FileReader(file));
即使我将测试文件放在桌面上并使用绝对路径,文件阅读器也找不到该文件

我不知道该怎么办,我试过很多东西


有人能帮我吗。

这里有两件事可以尝试:

  • 使用完整路径而不是相对路径使用完整路径,例如,类似于
    “/Users/BlueDragon709/Desktop/test.txt”
    而不是
    “/test.txt”

  • 如果失败,请检查文件权限

  • 当您当前正在使用文件时,在实例化扫描器之前,您不会尝试访问它,因此在您点击该行代码之前,扫描器不会失败。

    资源(Class.getResource)通常无法处理
    文件
    ,它们是类路径上的文件,可能打包在.jar文件中。您可以按如下方式获得一个阅读器:

    new InputStreamReader(getClass().getResourceAsStream("/test.txt"), StandardCharsets.UTF_8)
    
    上面使用资源的InputStream。如您所知,请为读取器指定文件的字符集


    与IDE的设置相结合,这是一个工作目录问题。

    文件
    表示一个抽象路径,并且很容易表示一个无效路径。您需要使用
    File.canRead()
    来验证
    File
    是否确实可以在那里找到某些内容。当我执行File.canRead()时,我会得到truegetClass()。getResource()仅适用于类路径中存在的文件。通常根目录不在类路径中。您应该记住,对于开发(src下的IDE)和生产(在JAR或WAR中),类路径可以不同。对于不在类路径中的文件,应使用正常的绝对或相对文件路径。还建议使用新的NIO接口路径而不是文件。