我正在使用java创建一个独立的应用程序,并且我需要插入用户从文件选择器中选择的图像的路径。
我正在获取文件的路径,但是当我将它存储在数据库(mysql)中时,它不存储\
,因此当我检索该路径时,文件不会显示。
如何使用\\
存储文件的路径,以便使用java代码对其进行转义?
我尝试使用replaceall方法,但它给出了非法字符集的错误。
filename.replaceall("\","\\");
但这没有成功。
答案 0 :(得分:5)
使用Prepared语句存储包含\
的路径。PreparedStatement
不会逃避任何事情
答案 1 :(得分:4)
由于String
是不可变的,并且您调用的所有方法都不会更改String
的内部值,而是返回修改后的结果,因此您需要指定替换为变量的结果。此外,由于您需要替换字符而不是正则表达式模式,replace()
方法绰绰有余。 replaceAll()
采用正则表达式,\
也是正则表达式中的特殊字符。
filename = filename.replace("\\", "\\\\");
但是,正斜杠应该在Windows中运行良好。
filename = filename.replace("\\", "/");
但是#2,您可能希望使用PreparedStatement
将其存储在数据库中,它会消除对您的错误和SQL注入敏感字符的清理。 Prepare here
与具体问题无关,您为什么要将文件路径存储在数据库中?这容易出现可移植性错误。我建议只存储(唯一的)文件名,并将实际文件放在一个可配置为应用程序设置的公共路径中。
答案 2 :(得分:0)
斜线应该不是问题。在插入数据库之前,请确保您的路径有斜杠。还要确保使用PreparedStatement插入数据。
答案 3 :(得分:-1)
关于你的帖子BalusC,但我想我不能同意你的一件事。确实,字符串是不可变的,但是filename.replace(“a”,“b”)返回字符串的新实例。
所以我认为没有必要分配新变量?
答案 4 :(得分:-1)
我们还可以使用addslashes
函数来保存文件路径,
addslashes($filepath)