0

我在 Windows 中有一个包含绝对文件路径的属性文件,如下所示:

[PRAXIS]
PVS=CDP_Z1
PXID=94773

[SENDEN]
PVS=CDP_Z1
DATEI=C:\imex_workspace\1535_1297160840340.1247
VERSION=2.5

[STATUS]
ERRORLEVEL=0
ERRORTEXT=
READY=0

该A文件包含B文件的文件路径。我想使用 Java Properties 类将 READY 属性写入 1,其他保持不变。

Properties p = new Properties();
String upload = "a.ini";
p.load(new FileInputStream(upload));
if(p.get("READY") != null && "0".equals(p.get("READY")))
{
  p.setProperty("READY","1");
  p.store(new FileOutputStream(new File(upload)),null);
}

不知何故,a.ini 中的文件路径在 a.ini 更新后被破坏。有人帮助找出在文件中写入属性的最佳方法(可能不是 ini,可能是 txt 文件)。

4

1 回答 1

2

问题背后的原因是对于 Java 属性文件,反斜杠字符用作C 或 Java 语言中的转义字符。

您在问题中发布的此文件不是有效的 Java 属性文件,它是 Windows INI 文件。Windows INI 文件与 Java 属性文件不同,因为它们具有“部分”(在您的示例中为 praxis senden 状态),还因为路径以 DOS 格式指定,这意味着反斜杠 ( \) 用作路径分隔符。在 Java 中,路径分隔符可用作\Windows 中的反斜杠 ( ),但最常见的是 unix 斜杠 ( /)。问题是,如果你想使用反斜杠,你需要“转义”它,所以你的路径应该用双反斜杠指定:

DATEI=C:\\imex_workspace\\1535_1297160840340.1247

或以其他方式:

DATEI=C:/imex_workspace/1535_1297160840340.1247

通过这种方式,路径与 Java 属性文件格式兼容。但这会对使用此 .ini 文件的 Windows 应用程序产生副作用。

为了解决这个问题,我认为您最好使用适当的库来处理 Windows.ini配置文件,这将保证涵盖这种情况,但也包括您可能没有考虑过的其他可能性,因为 Java 属性文件遵循不同的规范比 Windows.ini格式。

在这里,您可以找到一些您可能需要考虑的库:

于 2013-02-02T14:23:43.650 回答