java.net.MalformedURLException:找不到协议:但文件存在

时间:2013-10-07 12:19:42

标签: java android xml

我喜欢这个小方法:

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:找不到协议:

请帮我解决错误!

谢谢!

2 个答案:

答案 0 :(得分:3)

传递File实例

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

传递String时,DocumentBuilder#parse()需要采用URI格式

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

即。以及file://等协议。

参考:
DocumentBuilder#parse(String)

答案 1 :(得分:0)

异常最有可能意味着您提供了需要URL的文件路径名。当URL解析器在URL中找不到协议组件时,使用消息“Protocol not found”;即URL中第一个:之前的字符。如果您传递路径名,则路径中很可能不是: