ProcessBuilder InputStream in Array speichern

winzik77

Mitglied
Hallo!
Ich versuche den InputStream in ein Array abzulegen solange die readLine != 0 ist.
Wie aus dem output ersichtlich bekomme ich im Array immer zuletzt eine "null".
1. Wie krieg ich den 14. weg?
2. kann ich die Leerzeilen 2 und 4 auch irgendwie loswerden?
Danke, lg winzik

Code:
Java:
//Processbuilder Start
    	try {
    		ProcessBuilder pb = new ProcessBuilder("cmd", "/c","dir");//("bash", "-c","dir")
    		pb.directory( new File("C:/Users/Kerstin/Downloads") );
    		Process pr = pb.start();
    		pr.waitFor();
    		//Scanner reader = new Scanner ( pr.getInputStream() ).useDelimiter("\\Z");//(pr.getInputStream())
    		BufferedReader reader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
    		StringBuffer sb = new StringBuffer();
    		int counter1 = 0;
    		ArrayList<String> processarray = new ArrayList<String>();

			String line = reader.readLine();
			//sb.append(line);
			while (line != null) {
				line = reader.readLine();
				//sb.append(line);
				processarray.add(counter1,line);
				counter1++;
				System.out.println("Processbuilder Output: "+counter1+": "+line);
			}
    		} catch (Exception e) {
			e.printStackTrace(); }
Output:
Processbuilder Output: 1: Volumeseriennummer: CA05-B723
Processbuilder Output: 2:
Processbuilder Output: 3: Verzeichnis von C:\Users\Kerstin\Downloads
Processbuilder Output: 4:
Processbuilder Output: 5: 16.09.2013 19:06 <DIR> .
Processbuilder Output: 6: 16.09.2013 19:06 <DIR> ..
Processbuilder Output: 7: 10.03.2013 12:17 <DIR> Adobe CS5 Master Pack de
Processbuilder Output: 8: 16.09.2013 19:06 131.337.120 jdk-7u40-windows-x64.exe
Processbuilder Output: 9: 26.04.2013 08:28 993.769 xtc5_blau_xtcmodified-1.05.zip
Processbuilder Output: 10: 26.04.2013 12:35 993.719 xtc5_oliv_xtcmodified-1.05.zip
Processbuilder Output: 11: 26.04.2013 08:35 993.292 xtc5_rot_xtcmodified-1.05.zip
Processbuilder Output: 12: 4 Datei(en), 134.317.900 Bytes
Processbuilder Output: 13: 3 Verzeichnis(se), 539.212.091.392 Bytes frei
Processbuilder Output: 14: null
 
Deine Schleife holt sich die neue line und verarbeitet sie direkt - aber ob sie null ist, wird erst wieder am Anfang der nächsten Schleife geprüft. Du könntest stattdessen z.B. eine do-while-Schleife verwenden, bei der wird die Bedingung erst am Ende geprüft 🙂

Oder du baust noch eine if-Abfrage in die Schleife ein, direkt nach dem Zuweisen an line - und sorgst ggf. mit einem break dafür, dass bei line == null die Schleife verlassen wird.
 
Danke! Teil 1 hat mit continue geklappt!
Java:
			String line = reader.readLine();
			while (line != null) {
				line = reader.readLine();
				if (line == null) continue;
				processarray.add(counter1,line);
				counter1++;
				System.out.println("Processbuilder Output "+counter1+": "+line);
			}
    		} catch (Exception e) {
			e.printStackTrace(); }

So hats funktioniert. Allerdings habe ich immer noch Zeile 2 und 4 die zwar leer sind aber nicht "null".
Habst mit
Java:
if (line == "") break;
probiert allerding dürfte die command-line etwas anderes als "null" oder ein Leerzeichen liefern. Irgendein Tip?
Danke, lg winzik
 
Zuletzt bearbeitet:
Habs geschafft:
Java:
String line = reader.readLine();
				while (line != null) {
					line = reader.readLine();
					if (line == null) continue;
					processarray.add(counter1,line);
						if (processarray.get(counter1).length()==0) {
							//System.out.println(processarray.get(counter1));
							processarray.remove(counter1);
							continue;
						}
					counter1++;
					System.out.println("Processbuilder Output "+counter1+": "+line);
				}
				System.out.println(processarray);
    		} catch (Exception e) {
			e.printStackTrace(); }
 

Neue Themen


Zurück
Oben