[英]How to end the input stream in java
我正在嘗試使用input.close()關閉inputstream,但是我無法這樣做。
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.
提前致謝。
您可以將您的bufferedreader放在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();
}
另外, (line = input.readLine().trim()) != null
可能會在input.readLine()
返回null時引發NullPointerException。
input.readLine()
將返回null,以指示流結束。
如果readLine()
返回null,則調用trim()
將引發NullPointerException
,因此保證分配給line
值不為null。
這意味着while (line != null)
始終為true ,因此循環永遠不會結束。
編譯器正確,循環后的代碼不可訪問。
您需要在檢查空值后調用trim
:
while ((line = input.readLine()) != null) {
line = line.trim();
if (line.contains("<DIR>")) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.