필터링 메서드
파일 입출력으로 (fileInputStream으로) text파일을 읽어서 대조하는 방식
public String filtering(String msg) {
FileInputStream fis;
InputStreamReader isr;
BufferedReader bReader;
try {
fis = new FileInputStream("C:\\text\\filtering DB.txt"); //FileInputStream 객체생성
isr = new InputStreamReader(fis,"UTF-8"); //InputStream객체 생성
bReader = new BufferedReader(isr); //Buffered Reader 객체생성
String words = bReader.readLine();
// 파일에서 한줄씩 읽어와서 words에 저장
String[] warr = words.split(",");
//,를 구분자로 words에 저장되 있는 단어들을 구분해서 각 요소에 저장
int size= warr.length; //생성된 배열의 길이를 저장
String filterword = "";
for(int i=0; i<size ; i++) {
filterword = warr[i]; //한 요소씩 읽어서 filterword에 저장
if(msg.contains(filterword)) {
// 매개변수로 받은 채팅내용에 해당 단어가 포함되어 있는지 확인
int s = filterword.length();
//해당 단어(요소에서 읽어 온 단어)의 길이 저장
String hider = "";
int j=0;
while(j<s) {
//해당 단어의 길이만큼 *를 데이터로 갖고있는 String 변수 hinder 만들기
hider = hider +"*";
j++;
}
msg = msg.replaceAll(filterword, hider);
//대화 내용중 filterword 부분을 hinder로 대체하여 다시 저장
} //if
}//for
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("지정 경로에 해당파일 없음");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return msg; // 욕설에 해당하는 부분을 *로 대체한 대화내용을 전달
}
메세지 출력 부분 변동
Socket soket;
String msg;
String[] rmsg;
String filteredmsg;
private BufferedReader inMsg = null;
private PrintWriter outMsg = null;
public void run() {
boolean status = true;
System.out.println("##ChatThread start...");
try {
inMsg = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//예외발생 가능성
outMsg = new PrintWriter(socket.getOutputStream(), true);
while(status) { //수신부
msg = inMsg.readLine();
filteredmsg = filtering(msg);
//클라이언트에게 받은 채팅내용을 filtering메서드를 이용해서 대화내용 변환
rmsg = msg.split("/");
case NOMAL: {
broadCast(filteredmsg); //필터링된 대화내용 전체출력
break;
}
case WISPER: {
ChatThread from = hash.get(rmsg[1]);
ChatThread to = hash.get(rmsg[2]);
wisper(from,to, filteredmsg);
//찾은 송신 스레드 , 수신 스레드, 필터링 내용을 매개변수로 wisper메소드 호출
break;
}
실행화면을 보면 알겠지만 한국어 욕은 인식을 못하고 영어욕만 인식한다.
text파일에 한국어로 된 욕이 훨씬 더 많음에도 불구하고...
디버깅 돌려보니 text파일에서 한국어 욕을 읽어올 때 깨진채로 가져와서 제대로 된 대조가 안됨.
인코딩에 문제가 있는 것 같은데 아무리해도 인식불가...
inputstreamreader 연결할 때 매개변수로 UTF-8, EUC-KR 별 걸 다 넣어봤는데 안됨.
하도 인코딩 설정을 만지는 바람에 이클립스 자체 인코딩도 이상하게 되서 프로그램 지웠다가 다시 설치할 뻔.
그래도 어쨌든 의도한 대로 작동은 해서 일단 업데이트 겸 올린다.
읽어와서 대조하는 작업은 되니까.
이제 파일전송 남았는데.....
++추가
뭐가 문제 인지 알았다.
text파일 , 사이에 있는 공백이 문제였던 것.
나쁜놈을 읽어오는게 아니라 " 나쁜놈"을 읽어와서 대조를 하니 인식을 못함.
중간에 trim을 넣어줬더니 잘 됨.
'JAVA' 카테고리의 다른 글
재고관리 프로그램 (DB연동) (1) | 2021.03.30 |
---|---|
JAVA 소켓 채팅 프로그램 강퇴기능 구현 + 업데이트 (1) | 2021.03.13 |
소켓 기반 채팅 프로그램 귓속말 기능 구현 (0) | 2021.03.10 |
JAVA 소켓 채팅 프로그램 (server) (0) | 2021.03.04 |
JAVA 소켓 채팅 프로그램 (Client) (0) | 2021.03.04 |