java中如何判断一个String类型的filFilePath是否是一个合法的文件路径
现在碰到一个难题,我的代码并不能符合我自己的要求,如下:
boolean isLegal = true;
String[] letters = new String[] { "/", "\\", ":", "*", "?", "\"", "<",
">", "|" };
for (int i = 0; i < letters.length; i++) {
if (filFilePath.indexOf(letters[i]) != -1) {
isLegal = false;
break;
}
}
if (!isLegal) {
//msg.setCode("AP_GBC007_3");
//container.setJspErrMsg(msg);
return false;
}
我解释一下,letters数组中定义的字符都是windows里不允许在文件名中出现的,
可是如果filFilePath="c:/1.jpg"原则上是合法的,但我的方法却把它认作非法的,请问,如何改进我的方法呢?
注意:千万不能用java.io.File类的isFile方法,这个方法只能判断服务器上是否有这个文件,并且文件名是否合法
而不能判断客户端浏览器那传过来的filFilePath是否合法。
[解决办法]
当然会认为非法的
你的数组里 有"/"字符不是么?
你的参数 也有这个"/"
if (filFilePath.indexOf(letters[i]) != -1) {
isLegal = false;
break;
}
已经false break了
[解决办法]
这个有难度啊
c:/1/2/33.2/4en.jpg
不晓得33.2/4en.jpg是一起的还是33.2目录下面的4en.jpg文件
[解决办法]
应该把文件名和路径分开来判断是否合法
[解决办法]
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test01 { public static void main(String[] args) { String str = "c:/program file/a\\1.jpg"; String regex = "[a-zA-Z]:(?:[/\\\\][^/\\\\:*?\"<>|]{1,255})+"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); System.out.println(matcher.matches()); }}
[解决办法]
你追加一个判断啊,
if(path.indexOf("/")!=-1 && path.indexOf("\\")==-1){ 这样好像也是合法的,}
[解决办法]
有办法了,你把/转为\ 不就可以了,
[解决办法]
没太看明白楼主的意思
filFilePath="c:\/1.jpg"这样加"\"不知道是否能解决楼主的问题
我记得":"好像不影响,楼主可以自己试一下
JAVA中如果需要把一些符号写进字符串还想保证符号有意义的话,可以再符号前面加"\"
也不知道说的对不对,请不清楚.希望对LZ有用
[解决办法]
没想到具体的解决办法
只知道特殊的符合要转义
学习,关注
[解决办法]
过滤很简单的,用 stringbuffer 的StringTokenizer就可以了