You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ中Maven项目加载资源文件遇URI权限组件错误如何解决?

解决Maven项目中"URI has an authority component"报错问题

我已经查看过相关问题的解决方案,但在IntelliJ的Maven项目中仍遇到相同问题,我的项目情况如下:

  • Maven项目
  • somefile.txt位于资源文件夹中,文件名无拼写错误

源代码

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
public class FileLoading {
    public static void main(String ... args){
        File someFile = null;
        try {
            someFile = new File( new URI("file://somefile.txt"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        System.out.println(someFile.getPath());
    }
}

报错信息

"C:\Program Files\Java\jdk1.8.0_162\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=51711:C:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_162\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\rt.jar;C:\Users\U631156\code\java\target\classes" FileLoading
Exception in thread "main" java.lang.IllegalArgumentException: URI has an authority component
at java.io.File.<init>(File.java:423)
at FileLoading.main(FileLoading.java:9)
Process finished with exit code 1

问题原因与解决办法

这个报错的核心原因是你用的file://somefile.txt格式URI包含了权威组件——简单说就是//后面的部分(哪怕是空的),而Java的File类构造函数不接受带这种组件的URI。给你两种实用的解决方式:

方式一:调整URI格式

把URI改成file:somefile.txt(去掉两个斜杠),这样就不会触发权威组件的问题了,修改后的代码如下:

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
public class FileLoading {
    public static void main(String ... args){
        File someFile = null;
        try {
            someFile = new File( new URI("file:somefile.txt"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        System.out.println(someFile.getPath());
    }
}

方式二:用类加载器读取资源(更推荐)

因为你的文件是Maven资源文件夹里的,运行时会被放到classpath下,直接用File可能会因为路径问题找不到文件,用类加载器读取更可靠,还不用纠结URI格式:

import java.io.InputStream;
public class FileLoading {
    public static void main(String ... args){
        // 通过类加载器获取资源输入流
        InputStream inputStream = FileLoading.class.getClassLoader().getResourceAsStream("somefile.txt");
        
        if(inputStream != null){
            System.out.println("成功找到并读取资源文件");
            // 记得用完关闭流,避免资源泄漏
            try {
                inputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("未找到指定的资源文件");
        }
    }
}

这种方式适配Maven项目的资源管理逻辑,不管是本地运行还是打包后都能正常读取文件。

内容的提问来源于stack exchange,提问作者Ashish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:25:40