java调用系统命令范例
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class SystemCommandCall {
public static void main(String[] args) throws Exception {
String cmd = "ping 8.8.8.8"; //运行的命令
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(cmd);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
}
}
简介
通过java annotations(注解)形式将TestRule或TestRule子类的实例添加到测试类中,来扩展各种测试功能。
环境
文件目录
.
├── main
│ ├── java
│ └── resources
└── test
├── java
│ └── example
│ ├── TestTemporaryFolder.java
│ └── TestTestName.java
└── resources
继续阅读全文>>
简介
本文主要讲解log4j2的基本使用配置。讲解内容如下
- 无配置文件
- 有配置文件但无配置
- 只配置Appender和Logger
- Layout指定
- 子Logger
- Filter使用
- Property定义与使用
- 环境变量, 系统属性等引用
- Script运用
- 配置分割成多个文件
继续阅读全文>>
前言
诸如利用多线程并行访问数据库可以提高系统的并发性能,但是线程变多伴随而来的是,当线程数大于DBMS(数据库管理系统)设置的最大DB连接数时,程序就挂掉了。在JAVA中如何避免这种问题呢?
解决方法
使用ExecutorService,限制最大线程数量
ExecutorService是?
ExecutorService是JAVA标准的并行计算库[java.util.concurrent]里包含的接口,封装原来难以使用的JAVA线程,使其简单化。
继续阅读全文>>
简介
Stream API借助前面介绍的java lambda表达式来进行集合数据处理。
下面举些常用的例子来熟悉下。
forEach
stream方法不调用也可以使用forEach
Arrays.asList(new Double[] { 1.0, 2.1, 3.2, 4.3, 5.4 }).forEach(System.out::println);
filter
集合内数据过滤
Arrays.asList(new Double[] { 1.0, 2.1, 3.2, 4.3, 5.4 }).stream().filter(x -> x > 3.0).forEach(System.out::println);
继续阅读全文>>
lambda表达式
lambda表达式是一种只拥有一个函数式接口的方法的叫法,可以简化封装。
函数式接口
在lisp这样的函数式编辑语言中,可以简单地把函数
当作参数传递。在java中,由于函数不是对象,故不能直接当作参数传递。但可以通过函数式接口实现函数传递。
package foo;
public interface Func {
public double apply(double x);
}
ps. 函数式接口只拥有一个抽象方法的接口
继续阅读全文>>
目录
- 生成编
- 结构编
- 行为编
让数据和处理逻辑分离
public class FooAmusementPark {
private FooZoo zoo;
private FooAquarium aquarium;
public void enjoy(FooFamily family) {
zoo.enjoy();
}
public void enjoy(FooCouple couple) {
aquarium.enjoy();
}
}
继续阅读全文>>
目录
- 生成编
- 结构编
- 行为编
让API返回信息适配多样性
FooAPI fooAPI = new FooAPI(lat, lng);
FooPlace place = new FooPlace();
place.setAddress(fooAPI.getPostalCode() + " " + fooAPI.getAddress()); // 邮编 **市**区
place.setStation(
new StringJoiner(",")
.add(fooAPI.getStation1())
.add(fooAPI.getStation2())
.add(fooAPI.getStation3())
.toString()); //A车站,B车站,C车站
上面代码是API返回信息整形用例。这里只使用了FooAPI
,未来如果返回信息的整形方式不变的话,倒也没有什么问题。但从易维护的角度思考,这称不上一个好的设计。
继续阅读全文>>
目录
- 生成编
- 结构编
- 行为编
简介
关于设计模式可以理解为,那些经常会遇到的问题以及如何解决所洗练出来的总结。所以我们在考虑进行设计时,首先要做的就是查询当前所面临的问题,是否已经有很好的解决方案,而不是闭门造车。身边有些同事喜欢需求来了,直接上来就撸代码,认为为了迎合设计模式而设计的工作,会有过度设计的嫌疑。什么时候是导入新工具,新技术的最佳时机?当一个事物让人难以忍受的时候,这时改变所带来的团队收益远大于痛苦程度,就可以很平缓地推进。反之,强推工具反而引来的不是技术上的问题,而是人为的抵制。是不是很奇妙!
本文主要通过问题配合设计模式,来说明设计模式所带来的前后效果,加深大家各种模式的印象。
继续阅读全文>>
问题
- 提供一个方法,该方法有二个整形输入参数a和b,返回从a到b所有的整数的和
- 且参数需要满足以下条件
青铜级回答
使用for循环
int iron (int a, int b) {
int result = 0;
for (int i = a; i <= b; i++) {
result = result + i;
}
return result;
}
继续阅读全文>>
近期评论