Java 在创建文件时将无效字符映射为有效字符,在读取文件名时将其映射回原始名称
我需要在创建文件时将无效字符映射到其他一些字符,如“/”到“”(正斜杠到下划线),因为文件名不允许放斜杠、问号、双引号等 如果我有Java 在创建文件时将无效字符映射为有效字符,在读取文件名时将其映射回原始名称,java,string,character,filenames,invalid-characters,Java,String,Character,Filenames,Invalid Characters,我需要在创建文件时将无效字符映射到其他一些字符,如“/”到“”(正斜杠到下划线),因为文件名不允许放斜杠、问号、双引号等 如果我有 String name = "Message Test - 22/10/2016"; 现在我想用上面的字符串来写一个文件,但由于斜杠的缘故,它给出了一个错误 因此,我想在编写文件时将斜杠像所有无效字符一样映射到任何其他字符。写完后,我需要阅读所有文件的名称&显示在页面上 不知怎的,我映射了字符,所以文件名是 Message_Test_-_22-10-2016 当
String name = "Message Test - 22/10/2016";
现在我想用上面的字符串来写一个文件,但由于斜杠的缘故,它给出了一个错误
因此,我想在编写文件时将斜杠像所有无效字符一样映射到任何其他字符。写完后,我需要阅读所有文件的名称&显示在页面上
不知怎的,我映射了字符,所以文件名是
Message_Test_-_22-10-2016
当我在web上显示它时,我需要返回文件名作为原始名称,如
Message Test - 22/10/2016
我正在使用java。有人能帮我解决这个问题吗?我如何开始编写这个方法,或者有没有api,或者有没有其他方法
我不想使用数据库将别名文件名与原始文件名关联起来
我需要将无效字符映射到其他一些字符,如“/”到“\ux”
它不够健壮,因为它假定您从未在文件名中使用。
如果使用它,如何知道在应用程序中存储为my\u file
的文件是否应显示为my\u file
或my/file
。
我认为更可靠的方法是使用一个文件(例如JSON或XML)存储每个文件的两个属性:
- 存储的文件名
- 在应用程序中表示它的可视名称
它需要一个额外的文件,但它使事情变得更加清晰。您可以使用映射来存储映射:
例如
Map Map=newhashmap();
map.put('/',''');
然后替换1次遍历中的字符:
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
if( map.containsKey(c) )
str.replace(c,map.get(c));
}
for(int i=0;我认为您无论如何都需要保存映射。假设有人想保存一个名为“Message\u Test-22-10-2016”的文件。您将名称更改为“Message\u Test\u 22-10-2016”。如果不进行映射,则很难找到需要替换的文件。是的,你说得对。但我有数千个或可能是数百万个文件。附加文件可以工作吗?在这种情况下,附加文件在性能和内存消耗方面是个坏主意。你应该使用一个映射文件,一组相关文件一起工作,并且这组相关文件应该有一个合理的大小。我不知道你的域,但如果我与文件系统并行,它可能是一个按目录映射的文件。
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
if( map.containsKey(c) )
str.replace(c,map.get(c));
}