求助:关闭socket的问题

tancz 2009-10-19 11:55:00
我写了个过滤脏字的类,经常抛出java.net.SocketException: Too many open files错误,请高手帮忙看一下
/**源码**/
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
* 过滤脏字实现类
* @author tancz
*
*/
public class KeyWordFilter {

private static Pattern pattern = null;
// 从filtrateWord文件初始化正则表达式字符串
private static void initPattern() throws IOException{
StringBuffer patternBuf = new StringBuffer("");
InputStream in = null;
// in;
try{
in = KeyWordFilter.class.getClassLoader().getResourceAsStream("filtrateWord.txt");
Properties pro = new Properties();
pro.load(in);
in.close();
Enumeration enu = pro.propertyNames();
patternBuf.append("(");
int i=0;
while(enu.hasMoreElements()){
i=i+1;
patternBuf.append((String)enu.nextElement()+"|");
}
patternBuf.deleteCharAt(patternBuf.length()-1);
patternBuf.append(")");

//换成UTF-8 Pattern.CASE_INSENSITIVE常量功能: 忽略大小写匹配
pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO-8859-1"), "UTF-8"),Pattern.CASE_INSENSITIVE);

// System.out.println("pattern:"+pattern);
// System.out.println("i=:"+i);
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}finally{
if(in != null)
in.close();
}
}
public static String doFilter(String str)
{
if(str!=null && !str.equals("")){
try{
initPattern();
}catch(IOException ioEx){
ioEx.printStackTrace();
}

Matcher m = pattern.matcher(str);
str = m.replaceAll("***");
return str;
}else{
return "";
}
}

}
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tancz 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lvbang_lzt 的回复:]
帮顶,没有看出眉目,但是发现lz使用了try{}catch(){}为何还throws IOException,这点不明白。
[/Quote]
因为在finlly块中的in.close()没做异常捕获处理,直接在方法首部把这个异常抛出了,现在我把异常处理方式稍微改一下
public class KeyWordFilter {

private static Pattern pattern = null;
// 从filtrateWord文件初始化正则表达式字符串
private static void initPattern(){
StringBuffer patternBuf = new StringBuffer("");
InputStream in = null;
// in;
try{
in = KeyWordFilter.class.getClassLoader().getResourceAsStream("filtrateWord.txt");
Properties pro = new Properties();
pro.load(in);
in.close();
Enumeration enu = pro.propertyNames();
patternBuf.append("(");
int i=0;
while(enu.hasMoreElements()){
i=i+1;
patternBuf.append((String)enu.nextElement()+"|");
}
patternBuf.deleteCharAt(patternBuf.length()-1);
patternBuf.append(")");

//换成UTF-8 Pattern.CASE_INSENSITIVE常量功能: 忽略大小写匹配
pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO-8859-1"), "UTF-8"),Pattern.CASE_INSENSITIVE);

}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}finally{
if(in != null)
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static String doFilter(String str)
{
if(str!=null && !str.equals("")){
initPattern();
Matcher m = pattern.matcher(str);
str = m.replaceAll("***");
return str;
}else{
return "";
}
}
}
lzh_me 2009-10-20
  • 打赏
  • 举报
回复
帮顶,没有看出眉目,但是发现lz使用了try{}catch(){}为何还throws IOException,这点不明白。
tancz 2009-10-20
  • 打赏
  • 举报
回复
怎么没高手进来啊。。
tancz 2009-10-19
  • 打赏
  • 举报
回复
finally{
if(in != null)
in.close();
}
这里执行了流的关闭
monkeyking1987 2009-10-19
  • 打赏
  • 举报
回复
应该是读取文件后没把文件关闭引起的吧。或者对应的文件输入输出流

50,550

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧