java - 如何在java中结束输入流
问题描述
我正在尝试使用 input.close() 关闭输入流,但我无法这样做。
try {
String line;
Set<String> folderList = new HashSet<>();
Process p = Runtime.getRuntime()
.exec(new String[] { "cmd", "/K", "dir \"c:\\Program Files\\apache-tomcat-*\" /s" });
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine().trim()) != null) {
if (line.contains("<DIR>")) {
String folder = line.substring(line.indexOf("<DIR>") + "<DIR>".length()).trim();
// System.out.println("c:\\Program Files" + "\\" + folder + "\\lib\\");
String path = "c:\\Program Files" + "\\" + folder + "\\lib\\";
folderList.add(folder);
System.out.println(path);
}
}
input.close();
System.out.println("****"); // unreachable code error is I am not able to go out of the while loop.
提前致谢。
解决方案
你可以把你的缓冲阅读器放在一个 try 子句中,它会自动关闭。
String line;
Set<String> folderList = new HashSet<>();
Process p = Runtime.getRuntime()
.exec(new String[] { "cmd", "/K", "dir \"c:\\Program Files\\apache-tomcat-*\" /s" });
try(BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
while ((line = input.readLine().trim()) != null) {
if (line.contains("<DIR>")) {
String folder = line.substring(line.indexOf("<DIR>") + "<DIR>".length()).trim();
// System.out.println("c:\\Program Files" + "\\" + folder + "\\lib\\");
String path = "c:\\Program Files" + "\\" + folder + "\\lib\\";
folderList.add(folder);
System.out.println(path);
}
}
System.out.println("****");
} catch (IOException e) {
e.printStackTrace();
}
此外,当返回 null(line = input.readLine().trim()) != null
时有可能抛出 NullPointerException 。input.readLine()
推荐阅读
- typescript - 路线上的离子路由器吐司
- java - 在 java 中打印 setProperty 值
- javascript - Using Jest within webpack 4 project throws 'Jest encountered an unexpected token' error
- angular - 如何使用 NgRx-router-store 将 NavigationExtras 带到商店?
- reactjs - 我们可以在 React 代码中添加 Html id 并创建条件吗
- css - 为什么我的 Google Chrome 中的默认用户代理样式表在浏览器中的属性与在存储库中的属性不同
- python - 在 TensorFlow v1 中隐式启用 TensorFlow v2 行为
- c - sscanf 铸造警告 c
- c++ - 哪些实现符合 std::visit 的恒定时间调度?
- c# - C# Singleton-Pattern 在实现并行而不是并发处理后无法按预期工作