java实现杀掉txt进程,使用java代码关闭指定端口的程序-windows下

packagekill.window;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Scanner;importjava.util.Set;importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classKillServer {private Setports;public static void main(String[] args) throwsInterruptedException {

System.out.println("请输入要杀掉的windows进程的端口号,如果有多个,则以逗号相隔");

System.out.println("Please input kill port");

Scanner scanner= newScanner(System.in);

String input=scanner.next();

scanner.close();

String[] split= input.split(",");

Set ports = new HashSet<>();for(String spid : split) {try{int pid =Integer.parseInt(spid);

ports.add(pid);

}catch(Exception e){

System.out.println("错误的端口号,请输入一个或者多个端口,以英文逗号隔开");try{

Thread.sleep(5000);

}catch(InterruptedException e1) {

e1.printStackTrace();

}

System.exit(0);

}

}

KillServer kill= newKillServer();

kill.ports=ports;

System.out.println("need kill " + ports.size() + " num");for(Integer pid : ports) {

kill.start(pid);

}

System.out.println("清理完毕,程序即将退出");

System.out.println("SUCCESS");

Thread.sleep(5000);

System.exit(0);

}public void start(intport){

Runtime runtime=Runtime.getRuntime();try{//查找进程号

Process p = runtime.exec("cmd /c netstat -ano | findstr \""+port+"\"");

InputStream inputStream=p.getInputStream();

List read = read(inputStream, "UTF-8");if(read.size() == 0){

System.out.println("找不到该端口的进程");try{

Thread.sleep(6000);

System.exit(0);

}catch(InterruptedException e) {

e.printStackTrace();

}

}else{for(String string : read) {

System.out.println(string);

}

System.out.println("找到"+read.size()+"个进程,正在准备清理");

kill(read);

}

}catch(IOException e) {

e.printStackTrace();

}

}/*** 验证此行是否为指定的端口,因为 findstr命令会是把包含的找出来,例如查找80端口,但是会把8099查找出来

*@paramstr

*@return

*/

private booleanvalidPort(String str){

Pattern pattern= Pattern.compile("^ *[a-zA-Z]+ +\\S+");

Matcher matcher=pattern.matcher(str);

matcher.find();

String find=matcher.group();int spstart = find.lastIndexOf(":");

find= find.substring(spstart + 1);int port = 0;try{

port=Integer.parseInt(find);

}catch(NumberFormatException e) {

System.out.println("查找到错误的端口:" +find);return false;

}if(this.ports.contains(port)){return true;

}else{return false;

}

}/*** 更换为一个Set,去掉重复的pid值

*@paramdata*/

public void kill(Listdata){

Set pids = new HashSet<>();for(String line : data) {int offset = line.lastIndexOf(" ");

String spid=line.substring(offset);

spid= spid.replaceAll(" ", "");int pid = 0;try{

pid=Integer.parseInt(spid);

}catch(NumberFormatException e) {

System.out.println("获取的进程号错误:" +spid);

}

pids.add(pid);

}

killWithPid(pids);

}/*** 一次性杀除所有的端口

*@parampids*/

public void killWithPid(Setpids){for(Integer pid : pids) {try{

Process process= Runtime.getRuntime().exec("taskkill /F /pid "+pid+"");

InputStream inputStream=process.getInputStream();

String txt= readTxt(inputStream, "GBK");

System.out.println(txt);

}catch(IOException e) {

e.printStackTrace();

}

}

}private List read(InputStream in,String charset) throwsIOException{

List data = new ArrayList<>();

BufferedReader reader= new BufferedReader(newInputStreamReader(in, charset));

String line;while((line = reader.readLine()) != null){boolean validPort =validPort(line);if(validPort){

data.add(line);

}

}

reader.close();returndata;

}public String readTxt(InputStream in,String charset) throwsIOException{

BufferedReader reader= new BufferedReader(newInputStreamReader(in, charset));

StringBuffer sb= newStringBuffer();

String line;while((line = reader.readLine()) != null){

sb.append(line);

}

reader.close();returnsb.toString();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值