从已编译的jar中读取资源文件,返回文件

时间:2018-03-15 15:50:39

标签: java file jar resources

我已经阅读了这个Reading a resource file from within jar但是我无法弄清楚如何获取文件而不是输入流,这就是我需要的。这是代码:

private void duplicateDocument() {
    FileOutputStream fos = null;
    File file;

    try {
        try {
            doc = new File(getClass().getResource("1.docx").toURI());
            //doc = new File(getClass().getResourceAsStream("1.docx"));
        } catch (URISyntaxException ex) {
            Logger.getLogger(ForensicExpertWitnessReportConfigPanel.class.getName()).log(Level.SEVERE, "Failed ...", ex);
        }

        file = new File("C:\\Users\\student\\Documents\\myfile.docx");
        fos = new FileOutputStream(file);

        /* This logic will check whether the file
        * exists or not. If the file is not found
        * at the specified location it would create
        * a new file
        */
        if (!file.exists()) {
            file.createNewFile();
        }

        /*String content cannot be directly written into
        * a file. It needs to be converted into bytes
        */          
        byte[] bytesArray = FileUtils.readFileToByteArray(doc);

        fos.write(bytesArray);
        fos.flush();
        System.out.println("File Written Successfully");
    } 
    catch (IOException ioe) {
        ioe.printStackTrace();
    } 
    finally {
        try {
            if (fos != null) 
            {
                fos.close();
            }
        } 
        catch (IOException ioe) {
            System.out.println("Error in closing the Stream");
        }
    }
}

FileUtils.readFileToByteArray是我迄今为止唯一能够工作的东西,这就是为什么我需要一个文件而不是一个输入流。

目前,上面的代码给出了“一个java.lang.IllegalArgumentException”,这就是为什么我在网上看到一个使用getResourceAsStream()的建议 - 但是却无法将其作为文件返回。

我的下一个选择是试用Reading a resource file from within jar - 缓冲读卡器。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我推荐this doc及其许多有用的功能:

>

资源原则上是一个只读文件,可能压缩在jar中。 因此,无法回写它,它只能作为真实文件的模板,就像这里所做的那样。

答案 1 :(得分:0)

我得到了它,使用它:

InputStream in = getClass().getResourceAsStream("1.docx"); 
byte[] bytesArray = IOUtils.toByteArray(in);