2013-10-07 42 views
0

嗨,我這個小方法:java.net.MalformedURLException但文件存在

private void modifyXML() { 
     try { 

      String filepath = main.fileWithPath; 
      File f = new File(filepath); 
      if(f.exists()){ 
       System.out.println("Exists"); 
      } 



      DocumentBuilderFactory docFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
      Document doc = docBuilder.parse(filepath); 
      doc.getDocumentElement().normalize(); 
      NodeList nList = doc.getElementsByTagName("DAQChannel"); 

//   int sorszam = table.row_id-1; 
// 
//   Node nNode = nList.item(sorszam); 
//   
//   if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
//    Element eElement = (Element) nNode; 
//    
//    eElement.getElementsByTagName("Name").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("Unit").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("Minimum").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("Maximum").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("Accuracy").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("SensorType").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("RegisterAddress").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("Offset").item(0).setTextContent(nameE.getText().toString()); 
//    eElement.getElementsByTagName("TimeStamp").item(0).setTextContent(nameE.getText().toString()); 
//   } 

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

      String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()); 

      String ujPath = filepath.substring(0, filepath.length()-10); 

      StreamResult result = new StreamResult(new File(ujPath+"/config_midified_"+mydate+".xml")); 
      transformer.transform(source, result); 

      System.out.println("Done"); 

     } catch (ParserConfigurationException pce) { 
      pce.printStackTrace(); 
     } catch (TransformerException tfe) { 
      tfe.printStackTrace(); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } catch (SAXException sae) { 
      sae.printStackTrace(); 
     } 

    } 

它打印出該文件存在正好在開始時,但比我得到了錯誤信息 java.net.MalformedURLException:未找到協議:

請幫我解釋我錯了什麼!

謝謝!

+1

'filepath'的值是什麼? – 2013-10-07 12:20:29

+0

請包含錯誤的完整堆棧跟蹤。 –

+0

10-07 14:16:27.398:W/System.err(25753):java.net.MalformedURLException:協議未找到:/storage/emulated/0/Ementor/config.xml – David

回答

2

傳遞一個File實例,而不是

Document doc = docBuilder.parse(new File(filepath)); 

當傳遞StringDocumentBuilder#parse()需要它是在URI格式

[scheme:][//authority][path][?query][#fragment] 

即與像file://協議一起。

參考:
DocumentBuilder#parse(String)

+0

謝謝!有用! – David

+0

@大衛不客氣。 –

0

異常很可能意味着您提供在需要的URL的文件路徑名。當URL解析器無法在URL中找到協議組件時,將使用消息「未找到協議」;即URL中第一個:之前的字符。如果您傳遞的是路徑名,那麼路徑中最有可能不是:

相關問題