当前位置: 首页 > 知识库问答 >
问题:

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

唐俊爽
2023-03-14

我从jar中读取了一个资源文件,但是我不知道如何获取一个文件而不是inputstream,这正是我所需要的。代码如下:

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是迄今为止我唯一能够工作的东西,这就是为什么我需要一个文件而不是inputstream的值。

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

我的下一个选择是尝试从jar缓冲读取器中读取资源文件。

有人能帮忙吗?

共有2个答案

暨宸
2023-03-14

我用这个让它工作了:

InputStream in = getClass().getResourceAsStream("1.docx"); 
byte[] bytesArray = IOUtils.toByteArray(in);
姜烨伟
2023-03-14

我推荐具有许多有用功能的文件:

Path out = Paths.get("C:\\Users\\student\\Documents\\myfile.docx");
InputStream in = getClass().getResourceAsStream("1.docx");
Files.copy(in, out, StandardCopyOption.REPLACE_EXISTING);

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

 类似资料:
  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo

  • 问题内容: 我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件。我可以获取所需文件的URL,但是当我将其传递给FileReader(作为字符串)时,我得到了FileNotFoundException,上面写着“文件名,目录名或卷标语法不正确”。 作为参考,我毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数。这似乎表明我用来获取URL的方法是

  • 问题内容: 我想像这样从我的jar中读取资源: //Read the file 并且在Eclipse中运行它时效果很好,但是如果我将其导出到jar中运行,则会出现: 我真的不知道为什么,但是经过一些测试,我发现我是否改变了 至 然后它的作用相反(它在jar中起作用,但在Eclipse中不起作用)。 我正在使用Eclipse,并且包含我的文件的文件夹位于类文件夹中。 问题答案: 而不是尝试将资源作为

  • 问题内容: 我在abc.jar的类路径中有一个文件X.json。abc.jar中有一个readFile方法,该文件读取为 如果我从jar的上下文中运行它,即在abc.jar内的某个文件中的main方法中运行它,它将很好地读取 但是,当从abc.jar外部从其他代码中调用readFile时,它将失败 如何通过从jar的上下文外部调用readFile方法获取File对象? 问题答案: 到部署时,这些资

  • 启动jar时,控制台会说找不到文件,也没有加载字体。我怎样才能解决这个问题? 我得到了这个密码: