现在碰到一个难题,我的代码并不能符合我自己的要求,如下:
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是否合法。
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.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());
}
}
这样好像也是合法的,
}
filFilePath="c:\/1.jpg"这样加"\"不知道是否能解决楼主的问题
我记得":"好像不影响,楼主可以自己试一下
JAVA中如果需要把一些符号写进字符串还想保证符号有意义的话,可以再符号前面加"\"
也不知道说的对不对,请不清楚.希望对LZ有用
[a-zA-Z]:这个我看懂了,剩下的乱七八糟的字符是什么意思啊?能否稍微
点拨一下呢
[a-zA-Z]:这个我看懂了,剩下的乱七八糟的字符是什么意思啊?能否稍微
点拨一下呢
c:/1/.jpg返回true,应该返回false
c:\1.jpg返回false,应该返回true能否再改进下?
c:/1/.jpg .jpg 是合法的文件名
c:\1.jpg 你在 JAVA 字符串中应该写为 "c:\\1.jpg"如果要让 .jpg 成为非法的文件名,改成这样就可以了。import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test01 {
public static void main(String[] args) {
String[] strs = {
"c:\\.jpg",
"c:/.jpg",
"c:/1/1.jpg",
"c:\\1.jpg"
};
String regex = "[a-zA-Z]:(?:[/\\\\][^/\\\\:*?\"<>|.][^/\\\\:*?\"<>|]{0,254})+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("");
for(int i = 0; i < strs.length; i++) {
System.out.println(strs[i] + " " + matcher.reset(strs[i]).matches());
}
}
}
过滤很简单的,用 stringbuffer 的StringTokenizer就可以了