Encoding 如何在文件名中对文件路径进行编码?(无碰撞,跨平台)

Encoding 如何在文件名中对文件路径进行编码?(无碰撞,跨平台),encoding,filenames,filepath,Encoding,Filenames,Filepath,如何在文件名中对文件路径进行编码,以使文件名有效且无冲突?换言之: 结果文件名不包含特殊字符,如“\”、“:”或“/” 两个不同的文件路径永远不会编码到同一个文件名中 示例:文件路径“C:\Program Files\My Program”->文件名“NGQKY4PBAP7LPKQPD6Y…” 此示例仅用于说明;也许有更好(更简单)的方法可以做到这一点 问题背景:此文件路径编码用于Java中的简单单实例检查:如果程序的两个实例位于不同的目录中,则可以同时运行,但如果它们位于完全相同的目录中,

如何在文件名中对文件路径进行编码,以使文件名有效且无冲突?换言之:

  • 结果文件名不包含特殊字符,如“\”、“:”或“/”
  • 两个不同的文件路径永远不会编码到同一个文件名中
示例:文件路径“C:\Program Files\My Program”->文件名“NGQKY4PBAP7LPKQPD6Y…”

此示例仅用于说明;也许有更好(更简单)的方法可以做到这一点

问题背景:此文件路径编码用于Java中的简单单实例检查:如果程序的两个实例位于不同的目录中,则可以同时运行,但如果它们位于完全相同的目录中,则不能同时运行。
我知道还有其他方法可以确保单实例属性,但我发现在我的特定情况下,filepath编码在成本效益比方面是最好的。

使用路径字符串,只编码特殊内容,如:

% -> %%
\ -> %)
/ -> %(
: -> %;
不再使用特殊字符,但仍然有用且可读。但是,由于您只是想确保唯一性,更好的(但不是可逆的解决方案)可能是:


我不相信您的文件系统中会有某个%文件和某个/文件,因此这可能对您有足够的帮助。

但是C:\foo\bar.txt和C:\foo%)bar.txt的名称将相等。然后使用我的第一次转换。我会选择第二个,因为没有人在他的文件夹中有foo.bar.txt文件,和名为foo/bar.txt的文件夹/文件。第一次转换就足够了。:)
: -> ;
\ -> %
/ -> %
% -> %