【问题标题】:Java: Referencing a file after being packaged (jar), getResourceAsStream? [duplicate]Java:打包后引用文件(jar),getResourceAsStream? [复制]
【发布时间】:2018-06-21 05:07:39
【问题描述】:

我正在尝试在我的项目中实现一个按钮,单击该按钮会自动加载特定文件。目前有一些按钮供用户从硬盘中选择文件。

所以,我下载了特定文件并将其插入到项目中。当使用 File f = new File("demofile") 或类似的东西时 getClass().getResource("/resources/file.txt").getFile();代码在本地工作。

但是,在打包项目时,会抛出 FileNotFoundException。

经过大量在线研究,建议使用以下内容:

InputStream is = getClass().getResourceAsStream("/resources/file.txt");

但是,对于这个项目,我需要将文件作为文件对象引用,以便可以将其作为参数传递给其他函数,例如:

in = new TextFileFeaturedSequenceReader(TextFileFeaturedSequenceReader.FASTA_FORMAT, file, DiffEditFeaturedSequence.class);

关于如何解决这个问题或将流读入文件对象的任何想法?

谢谢!

【问题讨论】:

  • 你不能。是时候重新设计你的程序,让它不使用File。如果有TextFileFeaturedSequenceReader,可能还有另一个类接受不同类型的输入(如InputStream)。

标签: java maven file jar stream


【解决方案1】:

如果您绝对必须传递文件,请将您的资源复制到temporary file

Path path = Files.createTempFile(null, null);
try (InputStream stream =
        getClass().getResourceAsStream("/resources/file.txt")) {

    Files.copy(stream, path, StandardCopyOption.REPLACE_EXISTING);
}

in = new TextFileFeaturedSequenceReader(
    TextFileFeaturedSequenceReader.FASTA_FORMAT,
    path.toFile(),
    DiffEditFeaturedSequence.class);

// Use the TextFileFeaturedSequenceReader as needed

// ...

Files.delete(path);

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2018-03-19
    • 2016-02-10
    • 2013-07-04
    • 2017-08-07
    • 2023-04-09
    相关资源
    最近更新 更多