当前位置:   article > 正文

inputstream 文件 是否存在 java_Java“文件”有效,但“ InputStream”无效

winserverinputstream无效

是我找到的最好的解释.就个人而言,尝试了InputStream的所有不同子类之后,我感到FileInputstream()返回的InputStream的实现和getResourceAsStream()返回的输入的实现在某种程度上略有不同(导致与javax.xml.parsers不兼容).

我会暂时打开此窗口,以防万一有人碰到一个答案,但是我已经完成了.感谢所有的建议,建议和帮助.时间也移到下一件事.

我有一个servlet,它从XML ini文件收集它的初始化数据,像这样从servlet会话上下文中将其作为InputStream打开.

HttpSession session = request.getSession(true);

ServletContext ctx=session.getServletContext();

InputStream myini = ctx.getResourceAsStream("/WEB-INF/myini.xml");

那行得通,但是稍后我要编写JUnit测试并在setup函数中,我需要访问相同的ini.我在测试环境中没有servlet上下文,所以我尝试使用创建一个InputStream

InputStream testing = new FileInputStream(String pathToFile);

并且

InputStream testing = new FileInputStream(File fileObj);

从XML解析器抛出的异常(如下)

我发现无法为我的初始化文件获取InputStream,而被迫使用File.

我检查了javadoc,在安全限制的情况下移动了文件位置.最终将双重构造函数添加到需要ini的类中,以接受File和InputStream以满足单元测试(这里我需要File ref)和运行时(其中InputStream从Servlet会话上下文返回)的需求.

但是我很困惑/很沮丧,所以我不得不问

如何使用“ File”返回文件对象,然后可以由javax.xml.parsers成功解析(请参见下面的函数)

File myini = new File("C:\\apache-tomcat-7.0.30\\myini\\myini.xml");

但是我不能使用“ InputStream”来做到这一点吗?

InputStream myini = new FileInputStream("C:\\apache-tomcat-7.0.30\\myini\\myini.xml");

使用完全相同的String路径(即文件存在)

每个分别传递给

public xmlNode parse(InputStream is) throws xmlException {

try {

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

document = dBuilder.parse(is);

document.getDocumentElement().normalize();

xmlNode node = new xmlNode(document.getDocumentElement());

return node;

} catch (ParserConfigurationException e) {

throw new xmlException("Error in configuration of XML parser", e);

} catch (SAXException e) {

throw new xmlException("Error in parsing XML document", e);

} catch (IOException e) {

throw new xmlException("Error in reading InputStream", e);

}

}

要么

public xmlNode parse(File file) throws xmlException {

try {

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

document = dBuilder.parse(file);

document.getDocumentElement().normalize();

xmlNode node = new xmlNode(document.getDocumentElement());

return node;

} catch (ParserConfigurationException e) {

throw new xmlException("Error in configuration of XML parser", e);

} catch (SAXException e) {

throw new xmlException("Error in parsing XML document", e);

} catch (IOException e) {

throw new xmlException("Error in opening file", e);

}

}

仅在调用InputStream方法时(如上所述进行适当的初始化之后),才会引发此异常.

xml.utils.xmlException: Error in reading InputStream

at xml.utils.xmlDocument.parse(xmlDocument.java:40)

at com.jcando.util.XMLini.(XMLini.java:49)

是否有其他方法将路径定义为InputStream的字符串?

有我不知道的安全保护区吗?

如果有人可以解释我所缺少的,或者我在哪里变得笨拙,我将不胜感激.

解决方法:

您始终可以编写File f = new File(“ anyName”):即使该文件不存在,它也永远不会引发异常.

但是,如documentation所示,如果文件不存在,则编写InputStream myini = new FileInputStream(“ anyName”)会引发FileNotFoundException异常.

标签:fileinputstream,java,inputstream

来源: https://codeday.me/bug/20191123/2064390.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/147260
推荐阅读
相关标签
  

闽ICP备14008679号