2013-07-01 4 views
0

Я пытаюсь редактировать xml-файл из java-кода. вот метод:java.io.FileNotFoundException: file:/xxxxx

public static void changeReportPath(String reportPath){ 

     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder; 
     try { 
    docBuilder = docFactory.newDocumentBuilder(); 
    File file = new File(reportPath); 
    Document doc = docBuilder.parse(reportPath); 

    // Get the root element 
    Node root = doc.getFirstChild(); 
    // Get the staff element by tag name directly 
    NodeList parameter = doc.getElementsByTagName("defaultValueExpression"); 

    NodeList defaultValueExpression =parameter.item(0).getChildNodes(); 

     defaultValueExpression.item(0).setTextContent('"'+"/home/amira/work/"+'"'); 

    // write the content into xml file 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 

    StreamResult result = new StreamResult(new File(reportPath)); 


    transformer.transform(source, result); 


     } catch (ParserConfigurationException e) { 

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

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

    e.printStackTrace(); 
     } catch (TransformerConfigurationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } catch (TransformerException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } 


} 

Вот вызов метода:

Utilities.changeReportPath("/home/amira/xx/runtime/uploads/report/project/myfile.jrxml"); 

Вот журнал ошибок:


java.io.FileNotFoundException: file:/home/amira/xx/runtime/uploads/report/project/DEVFACCOA.jrxml (No such file or directory) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70) 
    at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:235) 
    at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:278) 
    at com.kopimap.utilities.Utilities.changeReportPath(Utilities.java:205) 
    at com.example.kopimapreportgeneration.KopimapreportgenerationUI$ReportUploader.uploadSucceeded(KopimapreportgenerationUI.java:159) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:167) 
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:968) 
    at com.vaadin.ui.Upload.fireUploadSuccess(Upload.java:811) 
    at com.vaadin.ui.Upload$1.streamingFinished(Upload.java:1070) 
    at com.vaadin.server.communication.FileUploadHandler.streamToReceiver(FileUploadHandler.java:554) 
    at com.vaadin.server.communication.FileUploadHandler.handleFileUploadValidationAndData(FileUploadHandler.java:419) 
    at com.vaadin.server.communication.FileUploadHandler.doHandleSimpleMultipartFileUpload(FileUploadHandler.java:382) 
    at com.vaadin.server.communication.FileUploadHandler.handleRequest(FileUploadHandler.java:267) 
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1329) 
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:236) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:619) 

Я нашел это enter link description here

Так я изменить строка:

Document doc = docBuilder.parse(file.toURI().toString()); 

Но проблема остается

+2

Я могу только предположить, что вы проверяете, действительно ли файл существует? Файл, который не может быть найден, это 'DEVFACCOA.jrxml', и в вашем примере вызова он говорит' myfile.jrxml'. Не знаете, как выглядит файл Jasper, но, возможно, он относится к файлу, который вы пропустили? – Qben

+0

нет нет, я тестирую его дважды, файл существует – AmiraGL

+0

Может ли быть проблемой разрешения, когда ваше приложение не имеет прав доступа к файлу? – Qben

ответ

1

Использовать файл вместо URI:

Document doc = docBuilder.parse(reportPath); 

Заменить его:

Document doc = docBuilder.parse(file); 

Согласно Java Doc:

public class FileNotFoundException extends IOException

Сигналы о том, что попытка открыть файл, обозначенный указанным именем , не удалась.

Это исключение будет вызываться файловыми файлами FileInputStream, FileOutputStream и RandomAccessFile, когда файл с указанным именем пути не существует. Они также будут выбрасываться этими конструкторами , если файл существует, но по какой-то причине недоступен, например, когда предпринимается попытка открыть файл только для чтения для записи.

Так что вы либо не имеют файл или нет необходимых разрешений

+0

Спасибо, но проблема не устранена – AmiraGL

+0

Тогда, вероятно, это проблема с разрешением. Попробуйте это: chmod u + rw, g + rw, o + rw для вашего файла – Tala

+0

нет, это не проблема разрешения – AmiraGL

1

я не уверен, но думаю, что you'r проблема заключается в определении пути. я имею в виду, что вы должны, например, добавить корневой путь к вашему файловому адресу.