错误():构造函数文件(URL)未定义

Error(): The constructor File(URL) is undefined

我想使用 File() 构造函数将 sheet.xlsx 加载到一个变量中。

请在下面找到我的代码片段:

public class Main {
    
    File input = new File(Main.class.getResource("/res/sheet.xlsx"));

}

sheet文件在根项目下的资源文件夹中,并勾选了eclipse中的“用作源文件夹”选项。

File() 构造函数返回以下错误 The constructor File(URL) is undefined 尽管 getResource() returns 一个 URL.

我是不是用错了方法?有没有更好的方法解决我的问题。

您的意见很有帮助!

你想要的根本不可能。一个 java.io.File 对象代表一个 文件 并且 不能 代表任何其他东西。它不能表示 'a sack of bytes' 或 'an entry in a jar'。然而这就是你在这里所拥有的(罐子里的一个条目)。 File API 知道这一点,并且不允许您基于 URL 创建 File 对象,因为这通常是不可能的。

另一方面,资源是由类加载器加载的。开箱即用,这意味着它可以加载文件或 jar 文件中的条目,如果您有自定义类加载器,天空是极限:从网络加载,从数据库加载,动态生成 - 随心所欲。

解决方法是不使用文件 - 你所拥有的不是一个,所以不要试图用一个来表示它。幸运的是,所有非白痴 API 都有解决方案;除了你拥有的任何需要 File 的方法之外,还有一种方法需要 InputStreamURL。如果您的 API 不提供这样的东西,请找一个更好的图书馆。但是,很可能是这样。

坏主意:

FileInputStream fis = new FileInputStream("res/sheet.xlsx");
someApi.load(fis);

好主意:

try (InputStream in = Main.class.getResourceAsStream("/res/sheet.xlsx")) {
    someApi.load(in);
}