2017-02-22 114 views
0

我想解析SVG文件以获取在android应用程序中使用Xpath的路径。本机java以下面的方式解析路径。如何设置FileInputStream的文件路径?

try { 
    Document document = builder.parse(
      new FileInputStream("c:\\employees.xml")); 
} catch (SAXException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

我尝试使用如下所示的FileDescriptor

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = null; 
     try { 
      builder = factory.newDocumentBuilder(); 
     } catch (ParserConfigurationException e) { 
      e.printStackTrace(); 
     } 


     AssetManager assetManager = getBaseContext().getAssets(); 
     AssetFileDescriptor assetFileDescriptor = null; 
     try { 
      assetFileDescriptor = assetManager.openFd("android.svg"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor(); 
     FileInputStream stream = new FileInputStream(fileDescriptor); 

     try { 
      Document document = builder.parse(stream); 
     } catch (SAXException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

但是我的应用程序停止工作。我的代码有什么问题?

+1

我认为答案已经在stackoverflow。 这可能会帮助你[链接](http://stackoverflow.com/questions/14553292/fileinputstream-doesnt-work-with-the-relative-path) – vm345

回答

0

你不需要FileDescriptor。尝试如下。

InputStream input = assetManager.open("android.svg"); //From your asset folder 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = null; 
try { 
    builder = factory.newDocumentBuilder(); 
} catch (ParserConfigurationException e) { 
    e.printStackTrace(); 
} 

和解析您的inputbuilder

Document document = builder.parse(input);