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

是我找到的最好的解释.就个人而言,尝试了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值