精华内容
下载资源
问答
  • Java 调用系统命令

    千次阅读 2019-03-16 15:08:15
    Java 调用系统命令 操作 通过 java.lang.Runtime 类用操作系统命令 然后调用run.exec()进程来执行命令程序 package com.framework.test; import java.io.BufferedReader; import java.io....

    Java 调用系统命令

    操作

    1. 通过 java.lang.Runtime 类用操作系统命令
    2. 然后调用run.exec()进程来执行命令程序
    package com.framework.test;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
    
    /**
     * Java 调用系统命令
     * 通过 java.lang.Runtime 类用操作系统命令
     * 然后调用run.exec()进程来执行命令程序
     *  cmd /c dir 是执行完dir命令后结束程序。
     *  cmd /k dir 是执行完dir命令后不结束程序。
     *  cmd /c start dir 会打开一个新窗口后执行dir指令,原程序结束。
     *  cmd /k start dir 会打开一个新窗口后执行dir指令,原程序不结束。 
     *  可用cmd /k start cmd /? 查看系统帮助
     *  说白了 加 start 就是打开命令窗口操作  不加start 就是在控制台查看
     * @author lrd
     *
     */
    public class CmdTest {
    	   public static void main(String[] args)  {  
    
    		   Runtime run = Runtime.getRuntime();
    		   
    	        try {  
    	        	//可打开exe程序,也可执行cmd命令,注意 路径\要使用\\,表示转义
    	            // Process p = run.exec("E:\\一卡通测试工具\\串口调试助手\\kComm.exe");  //执行exe程序
    	        	Process p = run.exec("cmd /k  ping 127.0.0.1");                  //执行CMD命令
    	        	
    	            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),Charset.forName("GBK"))); 
    	            String lineMes;  
    	            while ((lineMes = br.readLine()) != null)
    	                System.out.println(lineMes);// 打印输出信息  
    	            
    	            //检查命令是否执行失败。  
    	            if (p.waitFor() != 0) {  
    	                if (p.exitValue() == 1)//0表示正常结束,1:非正常结束  
    	                    System.err.println("命令执行失败!");  
    	            }  
    	            br.close();  
    	        } catch (Exception e) {  
    	            e.printStackTrace();  
    	        }  
    	    }  
    
    }
    
    
    展开全文
  • 使用Java调用Linux系统命令

    千次阅读 2019-03-24 10:47:29
    有时候,我们在使用Java做一些操作时,可能性能上并不能达到我们满意的效果,就拿最近工作中的遇到的一个场景来说,需要对大量的小文件进行合并成一个大文件。 最开始的想法是使用Java做文件操作,遍历所有小文件...

    有时候,我们在使用Java做一些操作时,可能性能上并不能达到我们满意的效果,就拿最近工作中的遇到的一个场景来说,需要对大量的小文件进行合并成一个大文件。

    最开始的想法是使用Java做文件操作,遍历所有小文件然后往一个文件写(可以做成并发写),但是发现操作过程中遇到个问题,写一千多个小文件在本机Windows下需要花费几十秒的时间,即使在Linux环境下高配置的机器也需要将近十秒,这明显对接口的响应时间产生重要影响。这块怎么优化下呢?

    我们都知道在Linux下可以进行大文件的分割和合并,分别采用split和cat命令,于是做了个实验,在Linux下对相同的一个1G文件进行切割成1000个小文件,然后对这一千多个小文件进行合并。效果是惊人的!!!竟然瞬间就能合成完成了!这更加让我坚定了应该使用系统命令进行批量小文件进行合并的想法。

    我们这里封装一个类,用来调用系统命令,然后得到系统调用的返回结果。

    我们先封装了一个返回结果类:

    package com.majing.learning.fileupload.common.process;
    
    public class ProcessResult {
    	private boolean success = false;
    	private String errorMessage;
    	private String outputMessage;
    	public boolean isSuccess() {
    		return success;
    	}
    	public void setSuccess(boolean success) {
    		this.success = success;
    	}
    	public String getErrorMessage() {
    		return errorMessage;
    	}
    	public void setErrorMessage(String errorMessage) {
    		this.errorMessage = errorMessage;
    	}
    	public String getOutputMessage() {
    		return outputMessage;
    	}
    	public void setOutputMessage(String outputMessage) {
    		this.outputMessage = outputMessage;
    	}
    	
    }
    

    接着我们给出封装的系统调用实现类:

    package com.majing.learning.fileupload.common.process;
    
    import java.io.IOException;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    
    import org.apache.commons.lang3.StringUtils;
    
    public class CommandUtils {
    	
    	public static ProcessResult runCmdTest(ExecutorService executorService, String command) throws IOException, InterruptedException {
    		StringBuilder queryInputResult = new StringBuilder();
    		StringBuilder queryErroInputResult = new StringBuilder();
    		ProcessResult processResult = new ProcessResult();
    		String[] cmd = { "/bin/sh", "-c", command};
    		Process pro = Runtime.getRuntime().exec(cmd);
    		CountDownLatch lock = new CountDownLatch(2);
    		executorService.submit(new ProcessCheckTask(queryInputResult, lock, pro.getInputStream()));
    		executorService.submit(new ProcessCheckTask(queryErroInputResult, lock, pro.getErrorStream()));
    		boolean done = false;
    		while (!done) {
    			lock.await();
    			done = true;
    		}
    		processResult.setOutputMessage(queryInputResult.toString());
    		processResult.setErrorMessage(queryErroInputResult.toString());
    		processResult.setSuccess(StringUtils.isBlank(processResult.getErrorMessage()));
    		return processResult;
    	}
    }
    

    其中ProcessCheckTask类如下:

    package com.majing.learning.fileupload.common.process;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.concurrent.CountDownLatch;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.majing.learning.fileupload.common.ConstValues;
    
    public class ProcessCheckTask implements Runnable {
    	
    	private static Logger logger = LoggerFactory.getLogger(ProcessCheckTask.class);
    
    	/** 锁 */
    	private CountDownLatch lock;
    
    	/** 执行结果输入流 */
    	private InputStream inputStream;
    
    	/** 字符拼接 */
    	private StringBuilder queryInputResult;
    
    	public ProcessCheckTask(StringBuilder queryInputResult, CountDownLatch lock, InputStream inputStream) {
    		super();
    		this.lock = lock;
    		this.inputStream = inputStream;
    		this.queryInputResult = queryInputResult;
    	}
    
    	@Override
    	public void run() {
    		try {
    			BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));
    			String line = null;
    			while ((line = bf.readLine()) != null && line.length() > 0) {
    				queryInputResult.append(line).append("\n");
    			}
    		} catch (Exception e) {
    			logger.error(ConstValues.EXCEPTION_OCCURED, e);
    		} finally {
    			lock.countDown();
    		}
    	}
    }

    上面是一个简单实现,但是可能会存在一个问题,那就是执行系统命令的时间如果本身比较长,如果不想一直等待到系统命令执行完,而是在一段时间没有返回就直接认为失败,所以需要增加过期时间的考虑。这里我借助于Future框架,将上面的调用系统命令的方法封装成一个Callable对象。

    package com.majing.learning.fileupload.common.process;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    
    public class CommandTask implements Callable<ProcessResult>{
    	
    	private ExecutorService executorService;
    	
    	private String command;
    	
    	public CommandTask(ExecutorService executorService, String command){
    		this.executorService = executorService;
    		this.command = command;
    	}
    
    	@Override
    	public ProcessResult call() throws Exception {
    		return CommandUtils.runCmdTest(executorService, command);
    	}
    
    }
    

    然后在上面的CommandUtils的基础上再封装一层变成CommandHelper,具体实现如下:

    package com.majing.learning.fileupload.common.process;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.TimeUnit;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.majing.learning.fileupload.common.ConstValues;
    
    public class CommandHelper {
    	
    	private static Logger logger = LoggerFactory.getLogger(CommandHelper.class);
    	
    	private static ExecutorService executorService=Executors.newFixedThreadPool(50);
    	
    	private static long default_timeout = 8000;
    	
    	public static ProcessResult process(String command){
    		return process(command, default_timeout, TimeUnit.MILLISECONDS);
    	}
    	
    	public static ProcessResult process(String command, long timeout, TimeUnit unit){
    		CommandTask commandTask = new CommandTask(executorService, command);
    		Future<ProcessResult> processResult = executorService.submit(commandTask);
    		ProcessResult result = null;
    		try{
    			result = processResult.get(timeout, unit);
    		}catch(Exception e){
    			logger.error(ConstValues.EXCEPTION_OCCURED, e);
    		}
    		return result;
    	}
    
    }
    

    至此,我们在需要调用系统命令时直接调用CommandHelper.process(command)就可以了,然后拿到返回结果ProcessResult。我也是自己做个记录,有需要的朋友可以直接拿去用。

    顺便说一句,采用封装的这个类在完成上面相同的任务时,时间都在相同的机器上,耗时从原来的10s瞬间减少至200ms以内,由此可见,在适当的场景调用系统命令是多么重要啊。

    展开全文
  • java使用HttpClient实现服务端跨域HttpClient调用其他系统服务   一、 准备jar包 1、httpclient-4.5.3.jar 2、httpcore-4.4.8.jar 3、commons-logging-1.0.4.jar     二、HttpClient 执行 get 请求 ...

             java中使用HttpClient实现服务端跨域HttpClient调用其他系统服务

     

    一、 准备jar包

    1、httpclient-4.5.3.jar

    2、httpcore-4.4.8.jar

    3、commons-logging-1.0.4.jar

     

     

    二、HttpClient 执行 get 请求 后台代码    

        

    /**
    	 * @description: 使用httpClient对象执行get请求
    	 * @param: uri  需要跨域请求的uri
    	 * @author:wu
    	 * @throws IOException 
    	 * @throws ClientProtocolException 
    	 * @createDate:2018年2月28日 下午2:19:00
    	 */
    	public static String  doGet(String uri) throws ClientProtocolException, IOException{
    		if(StringUtils.isBlank(uri)){
    			uri="http://192.168.1.253:999/paseJson/cityJson";
    		}
    		// 1、 创建 httpClient 对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		// 2、 创建 get 对象
    		HttpGet get =new HttpGet(uri);
    		// 3、 执行 get 请求
    		CloseableHttpResponse response = httpClient.execute(get);
    		// 4、 获取返回结果 HttpEntity  对象
    		HttpEntity entity = response.getEntity();
    		// 5、获取返回结果中的数据  
    		String data = EntityUtils.toString(entity);
    		// 6、 关闭 response、 关闭 httpClient
    		response.close();
    		httpClient.close();
    		return data;
    	}

     

    三、 HttpClient 执行 post 请求 后台代码

     

    /**
    	 * @description:使用httpClient对象执行 post 请求
    	 * @param: uri 需要跨域请求的uri , formDataMap  模拟表单需要提交数据 (name - value 形式)
    	 * @author:wu
    	 * @createDate:2018年2月28日 下午4:36:55
    	 */
    	public static String doPost(String uri,Map<String,Object> formDataMap) throws ClientProtocolException, IOException{
    		if(StringUtils.isBlank(uri)){
    			uri="http://192.168.1.253:999/paseJson/cityJson";
    		}
    		// 1、创建httpClient 对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		// 2、 创建post 对象
    		HttpPost post =new HttpPost(uri);
    		// 3、 创建一个list形式数据,模拟提交表单。 
    		List<NameValuePair> formDataList=new ArrayList<>();
    		// TODO: 这里可以遍历模拟表单传递过来的数据 formDataMap
    		/*Iterator<Entry<String, Object>> iterator = formDataMap.entrySet().iterator();
    		while(iterator.hasNext()){
    			Entry<String, Object> next = iterator.next();
    			String key = next.getKey();
    			String value = next.getValue().toString();
    			formDataList.add(new BasicNameValuePair(key, value));
    		}*/
    		formDataList.add(new BasicNameValuePair("ids", "110"));
    		formDataList.add(new BasicNameValuePair("name", "httpClient 请求数据"));
    		// 4、 把表单数据包装到entity 对象中 (StringEntity)
    		StringEntity formData = new UrlEncodedFormEntity(formDataList, "UTF-8");
    		post.setEntity(formData);
    		// 5、 执行post请求
    		CloseableHttpResponse response = httpClient.execute(post);
    		// 6、 获取响应数据
    		HttpEntity entity = response.getEntity();
    		// 7、 响应数据转换为字符串
    		String data = EntityUtils.toString(entity);
    		// 8、 关闭 httpClient对象、关闭 response
    		response.close();
    		httpClient.close();
    		return data;
    	}
    

     

    四、 测试代码

    public static void main(String[] args) throws ClientProtocolException, IOException {
    	String  data="";
    	//data = doGet("http://192.168.1.253:999/paseJson/cityJson");
    	data= doPost("https://www.baidu.com/", null);
    	System.out.println(data);
    }

     

     

    五、源码附件

    不知道怎么上传。。

     

    (关于跨域的详细理解,请参考这篇文章: json和jsonp的区别和联系 springMVC实现jsonp跨域请求

     

     

    展开全文
  • Java调用Tuxedo服务

    千次阅读 2016-11-03 10:49:23
    Java调用Tuxedo服务,有三种方式: 1.JNI 发布Tuxedo服务无需做额外限制,无需借助于任何J2EE容器。会影响系统移植和带来性能问题。 2.WTC Weglogic为Tuxedo定制,存在一套和Tuxedo API相对应的Java API,发布...

    Java调用Tuxedo服务,有三种方式:

    1.JNI

    发布Tuxedo服务无需做额外限制,无需借助于任何J2EE容器。会影响系统移植和带来性能问题。

    2.WTC

    Weglogic为Tuxedo定制,存在一套和Tuxedo API相对应的Java API,发布Tuxedo服务无需做额外限制,双向调用。需要购买License,依赖于Weblogic容器,不能移植到其它J2EE容器。

    3.Jolt

    可用于但不依赖于J2EE容器,提供的API用WTC类似但不同。需要购买License,发布Tuxed服务有些额外的要求,不提供集成的Weblogic-server-tuxedo事务机制。

     

    最后欢迎大家访问我的个人网站:1024s

    展开全文
  • Java调用系统打印机打印

    千次阅读 2017-03-15 18:07:30
    package ...import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream;import javax.print.Doc; import javax.print.DocFlavor; import
  • Java调用操作系统API与DLL的使用

    千次阅读 2015-09-08 17:35:43
     之前一直觉得Java不能调用系统API就是一个莫大的遗憾,后来发现,我错了,还真可以的,下面就由小强带你研究研究,如果你会会C++当然最好,学习Java的都知道,Java是跨平台的语言,需要虚拟机,Java是无法直接访问...
  • java使用HttpURLConnection实现后端调用其他服务接口汇总Rest服务 一、java原生的 HttpURLConnection 1、代码实现: /** * description: 使用 HttpURLConnection 实现调用其他服务接口 * @param location 请求...
  • 为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。
  • java 如何调用系统打印机打印文件,也是从别人借鉴过来,免费的
  • java实现远程服务调用

    2018-12-22 14:11:52
    主要使用HttpClient进行多系统数据交互的demo,使用文档和jar
  • 有时候需要调用系统的API,比如调用GetLocalTime(),GetSystemTime(),...用过查询知道这些方法封装在kernel32.dll文件中,而Java调用dll文件非常麻烦,因此记录下自己整理的一些知识,希望对大家有一点帮助。 1.
  • Java调用Windows系统命令CMD

    千次阅读 2018-07-26 20:08:49
    Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。 cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。 cmd /c start dir 会打开一个新窗口后执行dir...
  • 原创 :https://blog.csdn.net/qq2531246791/article/details/84898221 转载请标明出处... import java.io.IOException; import java.io.BufferedReader; imp...
  • JavaJavaService实现Windows系统服务

    万次阅读 2016-04-09 11:52:51
    JavaJavaService实现Windows系统服务
  • Java获取系统时间的四种方法

    万次阅读 多人点赞 2016-11-09 18:07:08
    通过Date类来获取当前时间 总结:设置时间格式可通过调用SimpleDateFormat类进行设置和通过String中的format方法来设置。可通过Date类和System中的currentTimeMillis来获取! 点关注,不迷路 文章每周持续更新,...
  • java调用操作系统命令源码工具类,包含远程输入用户名和密码方式及本地调用,同时兼容处理了Windows及Linux命令和执行结果的返回。使用者可以通过工具类方法直接调用,传入操作系统的命令即可执行,方法返回操作结果...
  • Java调用系统默认程序打开本地文件

    千次阅读 2013-04-23 16:13:05
    完整版见https://jadyer.github.io/2013/04/23/java-open-local-file/
  • java调用系统命令之oracle数据库备份

    千次阅读 2011-12-11 14:34:29
    ...import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import ja
  • Java调用第三方接口示范

    万次阅读 多人点赞 2018-10-08 15:03:53
    人工智能,零基础入门!...【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】: pa...
  • Java实现Windows系统服务

    万次阅读 2010-03-04 20:47:00
    Windows系统服务(NT服务)相对于普通...不过,通常情况下,Windows系统服务使用C或C++实现,而有些时候基于某些因素的考虑,我们期望使用Java来实现系统服务,可以借助开源的JavaService达到此目的。以下演示其实现过
  • 使用java调用python代码

    千次阅读 2018-03-21 13:22:42
    1.为什么用java调用...java在web程序具有很大的优势,然而在科学计算,机器学习等领域中不如python,使用java调用python就是为了能够使得一个问题能够更好的解决。 2.本程序环境要求 java开发环境:eclipse ...
  • java调用系统打印机,实现打印

    千次阅读 2014-01-10 17:26:12
    // 查找所有的可用的打印服务 PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras); // 定位默认的打印服务 PrintService defaultService = PrintServiceLookup....
  • Java调用linux系统shell执行命令

    千次阅读 2012-08-06 15:59:48
    在linux操作系统上可以执行本地命令,并返回字符串。 在CentOS 6.3上已经测试正常运行。 package com.cz.shell; import java.io.BufferedReader; import java.io.IOException; import java.io....
  • java调用window系统默认打印机

    万次阅读 2013-11-04 11:55:31
    import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import javax.print.Doc;import javax.print.DocFlavor;import javax.print.DocPrintJob;import javax
  • Java调用Shell命令和脚本

    万次阅读 多人点赞 2016-05-07 13:45:43
    1.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且
  • //54powerman.blog.sohu.com1 下载javaServicehttp://javaservice.objectweb.org/获得windows的zip压缩版,文件名形如:JavaService-x.x.xx.zip,其中x.x.xx为版本号,当前版本为JavaService-2.0.10.zip,请使用最新...
  • <!-- @page {margin:0.79in} pre {font-family:"Liberation Serif"} ... 关于Android 添加系统级(java)服务调用的编写实现说明: 本文当主要描述Android添加java 系统服务的编写实现。 一.添加j
  • 使用Java调用Bartender完成模板打印

    千次阅读 热门讨论 2020-06-09 18:08:23
    使用Java调用Bartender完成模板打印 前段时间接到一个客户二次开发需求,在原有扫码出货系统中增加打印标签功能。之前标签客户是使用Bartender编辑后打印,由于是人工操作难免会出现错误,所以想与现有的出货系统...
  • Android aidl最终是通过c++实现,所以我们可以通过c++ 调用java层的系统服务。 首先我们需要一个继承自IInterface的代理接口类IXXXService: class IXXXService : public IInterface{ const String16 SERVICE_...
  • 【Java】使用Java调用Python的四种方法

    千次阅读 2020-07-30 11:31:55
    写在前面 为啥一个好好的岗位是Java开发工程师要去做写python呢?因为产品经理安排的(突然多少有点明白为啥程序员和...文章目录写在前面一、在java类中直接执行python语句二、在java中直接调用python脚本三、★★★使

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,416,305
精华内容 966,522
关键字:

java调用系统服务

java 订阅