初始化时如何在对 class 的构造函数调用中为 InputStream 对象容纳一个 FileInputStream 对象?

How to accommodate a FileInputStream object for InputStream object in the constructor call to the class while initializing?

1 为 myDocDesigner 创建和初始化对象:

这里是 myDocDesignerclass 的定义,构造函数为:

public myDocDesigner(customDocFormat doc, InputStream imageStream, int page) throws IOException 
{
    docImageStream(imageStream);
    calculatePageSize(doc, page);
}

2 来自 generateOutputDoc()myFileManager class 作为:

jMyDocDesigner = createObject("java"
                            ,"myPackage.visible.myDocDesigner")
                            .init(jMyLocalDoc ,myImageFileStream,1);

3 属性定义为:

/* load document : `customDocFormat` isn't only a format it also returns the document object of the type `customDocFormat` to be used in #1 & #2 above */

    //document & image file paths
    lStrInputFilePath = "#expandPath('sampledocs')#\mySampleDoc.pdf";
    lStrImageFilePath = "#expandPath('sampledocs')#\myPlacementLogo.png";
    //java FileInputStream object for the PDF file
    lOsPDFInput = CreateObject("java","java.io.FileInputStream")
                     .init(CreateObject("java","java.io.File").init(lStrInputPDFfile));
    jMyLocalDoc = createObject("java","myPackage.docModel.customDocFormat");
    jMyLocalDoc.load(lOsPDFInput);
    //FileInputStream Object for image
    lSignImage  = CreateObject("java","java.io.FileOutputStream")
                      .init(CreateObject("java","java.io.File").init(lStrImageFilePath));

4个问题:

明确一点,让事情变得简单:据我所知,我已经尝试了所有可能的选择 Java。但是我无法使它正常工作。这部分代码是项目的一部分,用于根据一些内部要求和约定来操作文档。每件事都运行良好......我逐步调试了整个代码,但这部分阻碍了一切......我尝试了 4-5 种变体来转换 FileInputStream 对象并将其传递给构造函数 InputStream 但每次我都收到此错误,这是可以理解的,因为它不接受我向它抛出的参数:

我更新了我的问题,因为我发现问题的原因在于我初始化的 FileInputStream 对象本身,正如 Leigh 在他的回答中指出的那样,结果我没有走正确的路,多亏了他...我能够继续使用我的代码,这是我的代码中唯一阻止项目完成的错误:( :

这是我处理的 PDDocument 和 PDDocumentInformation classes 的 Java 文件,我得到了不正确的编号。通过它加载文档后的页面数:go here

你可以试试这个:

lOsPDFInputStream = CreateObject("java","java.io.InputStream");
lOsPDFInputStream = lOsPDFInput;

现在尝试再次传递 lOsPDFInput,因为它现在是 InputStream 的对象。

您也可以尝试将 FileInputStream 转换为 InputStream:

  public void givenUsingPlainJava_whenConvertingFileToInputStream_thenCorrect() 
  throws IOException {
    File initialFile = new File("src/main/resources/sample.txt");
    InputStream targetStream = new FileInputStream(initialFile);
}

参考:http://www.baeldung.com/convert-file-to-input-stream

让我知道它是否适合你。

找到了,完美! myDocDesigner 的参数签名接受输入和输出文档的 FileInputStreamOutputStream 对象。整个问题是我缺乏 java 知识,我承认这一点,但多亏了这个小组,经过一些研究和测试,我做了一些改变,它神奇地起作用了。真的很高兴,因为我现在可以继续前进了。感谢 Leigh 的帮助。

        fis = createObject("java", "java.io.FileInputStream");
        lOsPDFInput = createObject("java", "java.io.BufferedInputStream").init(fis.init(arguments.lStrInputPDFfile));
        fos = createObject("java", "java.io.FileOutputStream");
        lOsPDFOutput = createObject("java", "java.io.BufferedOutputStream").init(fos.init(arguments.lStrOutputPDFfile));
        fimgs = createObject("java", "java.io.FileInputStream");
        lSignImage = createObject("java", "java.io.BufferedInputStream").init(fimgs.init(arguments.lStrSignImageFile));
        fkeys = createObject("java", "java.io.FileInputStream");
        lKeyStoreFileStream = createObject("java", "java.io.BufferedInputStream").init(fkeys.init(arguments.lStrKeyStoreFilePath));