如何通过另一个目录中的Java Class读取当前目录中的文件

时间:2012-06-28 16:44:43

标签: java xslt

我正在使用Linux操作系统。

我在解析&通过Java转换XML文件。

Java XMLTransform.class的位置:/ home / apps / source(此路径存在于CLASSPATH中) XML文件(工作目录)的位置:/home/apps/nk/working/payload.xml

当我进入“工作目录”时,我正在调用XMLTransform.class,将XML文件名payload.xml传递给它,但是收到以下错误:

XML-22004: (Fatal Error) Error while parsing input XML document (Invalid InputSource.).
---------
oracle.xml.parser.v2.XMLParseException: Invalid InputSource.
    at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:320)
    at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:248)
    at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:202)
    at oracle.xml.jaxp.JXTransformer.transform(JXTransformer.java:321)
    at TransformationEngine.main(TransformationEngine.java:30)

很明显,课程无法解析文件名。

请指点我如何解决这个问题?

注意:invoice_transformer.xsl与.class文件放在同一目录中,CLASS文件可以读取它。

Java代码:

import javax.xml.transform.*;
import java.io.*;

public class TransformationEngine {
public static void main(String[] args){

    String payloadFileName = args[0];

    String xslFile = "invoice_transformer.xsl";

    InputStream is = java.lang.ClassLoader.getSystemResourceAsStream(xslFile);
    InputStream pfis = java.lang.ClassLoader.getSystemResourceAsStream(payloadFileName);

    try{
        TransformerFactory tFactory = TransformerFactory.newInstance();

        Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(is));
        transformer.transform(new javax.xml.transform.stream.StreamSource(pfis),new javax.xml.transform.stream.StreamResult(new FileOutputStream("IDMpayload.csv")));

    }
    catch(Exception e){
        e.printStackTrace();
    }
}

}

1 个答案:

答案 0 :(得分:0)

getSystemResourceAsStream()在CLASSPATH中查找资源。您的CLASSPATH中没有/home/apps/nk/working/(是吗?)。

而是使用FileInputStream(由@Banthar建议)