编辑:getResourceAsStream()与FileInputStream
这是我找到的最好的解释。就我个人而言,在尝试了InputStream的所有不同子类后,我觉得FileInputstream()返回的InputStream和getResourceAsStream()返回的InputStream的实现在某些方面略有不同(导致与javax.xml.parsers.不兼容)。
我会把这个打开一段时间,以防有人碰巧有答案,但我已经完成了。感谢所有的建议、建议和帮助。时间也转向下一件事。
我有一个servlet,它从一个XML ini文件中收集初始化数据,它从servlet会话上下文将其作为输入流打开,如下所示
HttpSession session = request.getSession(true);
ServletContext ctx=session.getServletContext();
InputStream myini = ctx.getResourceAsStream("/WEB-INF/myini.xml");
这是可行的,但稍后我将编写JUnit测试和设置函数,我需要访问相同的ini。我在html" target="_blank">测试环境中没有servlet上下文,所以我尝试使用
InputStream testing = new FileInputStream(String pathToFile);
而且还
InputStream testing = new FileInputStream(File fileObj);
XML解析器引发的异常(如下)
我发现不可能为我的init文件获取InputStream,因此不得不使用该文件。
我检查了javadoc,在安全限制的情况下移动了文件位置。最终为需要ini的类添加了双构造函数,以接受File和InputStream以满足单元测试(我需要File ref)和运行时(InputStream从servlet会话上下文返回)...
但是我很困惑/很沮丧,所以我不得不问
为什么我可以使用“文件”返回一个文件对象,然后它可以被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.<init>(XMLini.java:49)
是否有不同的方法将路径定义为InputStream的字符串?是否有我不知道的安全块?
如果有人能解释我错过了什么,或者我在哪里厚得像树桩,我会很感激的。
getResourceAsStream()vs FileInputStream
这是我找到的最好的解释。就我个人而言,在尝试了InputStream的所有不同子类后,我觉得FileInputstream()返回的InputStream和getResourceAsStream()返回的InputStream的实现在某些方面略有不同(导致与javax.xml.parsers.不兼容)。
我怀疑您可能有字符编码错误或与解析文档中的相对URL相关的错误(尽管我不确定这是否会导致异常)。
我认为您可能希望尝试以下内容:
InputSource source = new InputSource(is);
source.setEncoding(... your character encoding ...);
source.setSystemId(systemId);
dBuilder.parse(inputSource);
其中,系统ID被确定为文件。toURI()。Toasciisting()。
您始终可以编写文件f=new File(“anyName”):即使文件不存在,它也不会引发异常。
然而,如果文件不存在,则写入输入流myini=new FileInputStream(“anyName”)将引发异常。
问题内容: 我试图在HashMap中找到一个键。我可以使用’get’打印选定的键,但是在if语句中使用’containsKey’时,找不到该键。 我知道该键存在于Map中,但它一直返回false。有什么想法的人吗? 我的代码: 这是Location类的代码: 问题答案: 您必须确保该类已正确实现其和方法(文档)。也就是说,如果两个对象实际上相等,则它们应该共享一个公共哈希码,并且它们的方法应该返回
我希望使用一行String.split()拉出'名称'在查询我写... 模式匹配器像预期的那样工作,但是我正在努力找出为什么String.split()不返回匹配! 打印输出
好吧,所以我得到了一个新的电脑 Windows 7 Pro 64位Service Pack 1 我安装了jdk-7U25-Windows-x64(jdk 1.7.0_25) 它安装在默认位置C:\program files\java\jdk1.7.0_25 我向Path环境变量添加了%java_home%\bin(是的,在添加之前我使用了;) 单击确定 关闭所有CMD窗口打开它们 现在,如果我运行
正在更新属性文件:/home/mehmet/works/netbeansprojects/hsm_java/build/built-clean.属性删除目录/home/mehmet/works/netbeansprojects/hsm_java/build 清洁: 初始化: 已创建目录:/home///netbeansprojects/hsm_java/build/empty 已创建目录:/hom
问题内容: 有什么方法可以从中创建对象吗? 我的要求是从RAR读取文件。我不是要写一个临时文件,而是要在RAR存档中找到一个文件。 问题答案: 您需要创建新文件并将内容复制到该文件: 我使用方便来避免手动复制流。它还具有内置缓冲。
请求在Postman/Java中失败,但在RESTClient中工作…以下是请求,并附上错误的截图。 这是一个POST请求 {“username”:“test”,“password”:“test”,“simulate_user”:“test”,“sourcetabledesc”:“testlist100”,“联系人”:[{“组织”:“ckt”,“workphone”:“12315423”,“fir