Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在创建文件时将无效字符映射为有效字符,在读取文件名时将其映射回原始名称_Java_String_Character_Filenames_Invalid Characters - Fatal编程技术网

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));
}