0

次のような絶対ファイルパスを含むウィンドウにプロパティファイルがあります。

[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プロパティファイルではなく、WindowsINIファイルです。Windows INIファイルはJavaプロパティファイルとは異なり、「セクション」(この例ではpraxis senden status)があり、パスが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 に答える