使用Runtime.getRuntime()创建一个进程,返回值为Process类。
进程的exec()方法执行dos命令。
process的waitFor()方法,等待命令执行完毕。
process.getinputstream()获取dos命令执行完的信息。
重要:
因为之前一直使用的是bufferReader去读,读取的返回值始终有两行读不出来。
原因为命令行窗口的输出有空行,使用readline读取当读到空行时就会自动停止。
后面使用InputStream字节流一个个字节读就可以读出来。
字节流
后续
BufferReader官网api.
查看官网BufferReader的api,一样可以使用read(char[] cbuf, int off, int len)使用缓冲区进行读取。而且使用BufferReader读取效率高。
为什么呢?
因为java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。
最大的区别是BufferedReader有默认的8k缓冲区。读取数据到缓冲区就可以减少去io读取数据的过程,减少程序开销,从而达到读取效率高。
常用io流读取文件
1.获取数据的字节流
2.使用inputStreamReader达到字符流转字节流
3.使用BufferedReader提高效率(缓冲)
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}