2012-06-28 2 views
0

Я работаю над ОС Linux.Как читать файл в текущем каталоге через Java Class в другом каталоге

Я столкнулся с проблемой разбора &, преобразуя XML-файл, хотя Java.

Расположение Java XMLTransform.class:/Главная/Приложения/источник (этот путь присутствует в 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(); 
    } 
} 

} 
+0

Вы должны использовать 'ClassLoader.getSystemResourceAsStream'? Похоже, что [FileInputStream] (http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileInputStream.html) будет работать нормально. –

ответ

0

getSystemResourceAsStream() ищет ресурс в CLASSPATH. У вас нет /home/apps/nk/working/ в вашем CLASSPATH (вы?).

использовать вместо FileInputStream (как это было предложено @Banthar)

Смежные вопросы