我正在从文件加载属性,该属性包含路径(Windows路径),我需要规范化它以创建可用路径。问题是我无法替换"\"。
这是我的测试类:
public class PathUtil {
public static String normalizeEscapeChars(String source) {
String result = source;
result = result.replace("b", "/b");
result = result.replace("f", "/f");
result = result.replace("n", "/n");
result = result.replace("r", "/r");
result = result.replace("t", "/t");
result = result.replace("\", "/");
result = result.replace(""", "/"");
result = result.replace("'", "/'");
return result;
}
public static void main(String[] args) {
try(FileInputStream input = new FileInputStream("C:\Users\Rakieta\Desktop\aaa.properties")) {
Properties prop = new Properties();
prop.load(input);
System.out.println(PathUtil.normalizeEscapeChars(prop.getProperty("aaa")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
此处属性文件:
aaa=Intermixkoza , intermixtrace
实际输出为:
Intermixkoza , intermix/trace
所需的输出是:
Intermix/koza , intermix/trace
有什么建议吗?
当我复制您的代码时,我的 IDE 抛出了一个错误,指出k
不是有效的转义字符。所以我删除了整行。
result = result.replace("k", "/k");
// I have not seen that escape character (Correct me if I am wrong)
我的输出是
aaa=Intermix/koza , intermix/trace
或者你试试康纳说的
result = result.replace("\k", "/k");
// This code is replacing k with /k in Intermixkoza. So it is kinda hard coded.
这也给出了相同的结果。
反斜杠已经由java.util.Properties
类解释。
要绕过这一点,您可以扩展它并调整load(InputStream)
方法,如以下答案所示:
public class PropertiesEx extends Properties {
public void load(FileInputStream fis) throws IOException {
Scanner in = new Scanner(fis);
ByteArrayOutputStream out = new ByteArrayOutputStream();
while(in.hasNext()) {
out.write(in.nextLine().replace("\","\\").getBytes());
out.write("n".getBytes());
}
InputStream is = new ByteArrayInputStream(out.toByteArray());
super.load(is);
}
}
在 java 中使用双反斜杠\
转义反斜杠。