我回答了问题但找不到解决方案。
我有属性文件,用户存储文件的位置。
e.g:
location = C:\images
在对他的回复中,我必须打印出location属性,然后打印出来:
C:images
如果我放在位置:
C:\\images\\
它打印出来就像这样(好像它没有处理字符串:
C:\\images\\
我希望只打印C:\images\
我该怎么做?
这也适用于我想写这样的HTML标签:
<img src ='"+locations+"'>
大多数浏览器会使用双反斜杠提取位置,但我不想依赖它。
修改
我很抱歉 - 我的错误。现在问题很好。请忽略Web浏览器无法访问C:\的表面
修改
我正在使用Jerrsey实现客户端响应,它使用Jax-B来编写响应,如下所示:
com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(Object t, MediaType mediaType, Charset c, Marshaller m, OutputStream entityStream) throws JAXBException:
protected void writeTo(Object t, MediaType mediaType, Charset c,
Marshaller m, OutputStream entityStream)
throws JAXBException {
m.marshal(t, entityStream);
}
输出流为com.sun.jersey.spi.container.ContainerResponse.CommittingOutputStream
我看到属性只加载了1。
我在WizTools.org
的休息客户端工具中得到了回复可能是问题吗?
答案 0 :(得分:2)
你需要逃避反斜杠,但不要使用正斜杠。因此,如果您有一个属性文件:
location = c:\\images\\
那应该没事。
例如,这是一个小型控制台应用程序:
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
// Would normally close the stream, of course :)
properties.load(new FileInputStream("test.properties"));
System.out.println(properties.getProperty("location"));
}
}
给定一个test.properties文件, 包含前面显示的行,打印出c:\images\
没有任何问题。
答案 1 :(得分:2)
反斜杠的使用容易出错。请使用
location=file:/C:/images/
或(建议其文件夹没有落后的“/”)
directory=file:/C:/images
此致
答案 2 :(得分:2)
Java属性文件格式的规范在Properties.load(Reader)
方法的javadoc中。它清楚地表明反斜杠必须被转义。它还指出,除了有效转义之外的某个字符后面的反斜杠是静默删除。
我只能断定您没有使用load
对象的Properties
方法之一来加载文件中的属性。而且,实际上,您没有遵循Java属性文件规范。
您可能有某些理由同时执行这两项操作,但如果您这样做,则不应该调用非标准文件格式“属性文件”...因为人们希望Java属性文件遵循规范。
但是,我建议您只使用标准格式/规范,并且只使用Properties.load(...)
和Properties.save(...)
来读取和写入属性文件。