gpt4 book ai didi

java - 文件复制在 Eclipse 测试环境中有效,但在打包程序中产生 URI 错误

转载 作者:行者123 更新时间:2023-12-02 02:46:03 25 4
gpt4 key购买 nike

我有一个程序需要一个可由用户修改的 Excel 文件,因此我在类路径中包含了一个副本,以防可手动更改的文件消失。这个想法是,第一次运行程序时,包含在包中的文件会被复制到另一个文件夹,用户可以在其中编辑它。

当我用eclipse运行测试时,复制实际上已经完成了。这样做的来源是这样的:

    public static void createExcelIfNotExists() throws URISyntaxException, IOException{
File fOrigin = new File("doc\\Data.xlsx");

if(fOrigin.exists())
return;

fOrigin = new File(ExcelDataProcessor.class.getResource("dt.xlsx").toURI());
File fDestiny = new File("doc\\Data.xlsx");

OutputStream o = new FileOutputStream(fDestiny);

Files.copy(fOrigin.toPath(), o);
}

Eclipse folder structure

正如我所说,在 eclipse 测试环境中是可以的,当我将项目导出到 .jar 文件时,问题就出现了。尽管文件夹 doc 实际上存在并且包实际上包含 dt.xlsx 文档,但当我运行程序时,该文件并未放置在那里。

当我运行程序时,我得到的错误就是图中的错误

d:\Jar>java -jar prog.jar
creating directory: logs
DIR created
creating directory: records
DIR created
creating directory: doc
DIR created
java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
at fileDataProcessing.ExcelDataProcessor.createExcelIfNotExists(ExcelDataProcessor.java:101)
at menus.MainMenu.initializeDirectoriesAndConfigFiles(MainMenu.java:880)
at menus.MainMenu.main(MainMenu.java:859)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

关于 URI 中的问题是如何产生的或者我如何解决它有任何提示吗?

最佳答案

当您的程序打包为 JAR 文件时,CLASSPATH 上的文件位于 JAR 文件的 ZIP 存档内。

话虽如此,您可以使用 ClassLoader.getResourceAsStream()访问 CLASSPATH 上的文件的方法。但无法使用上述版本的Files.copy()...

关于java - 文件复制在 Eclipse 测试环境中有效,但在打包程序中产生 URI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com