switch sirve settitle sentencia salir regresar que para opcion menus hacer como codigo java exception pipe unix-head

sirve - sentencia para salir en java



¿Cómo consigo Java para salir cuando se canaliza a la cabeza (2)

Si no te gusta el método .checkError() de la respuesta de Sascha y preferirías recibir excepciones, puedes usar

OutputStream stream = new FileOutputStream(FileDescriptor.out);

Se pierden las PrintStream específicas de PrintStream . En mi caso, no fueron relevantes y este enfoque fue más fácil que la construcción de un montón de controles piratas.

Tenga en cuenta que esto no se comportará si ha redirigido System.out través de System.setOut , ya que FileDescriptor.out apuntará al descriptor de salida original, no a su redireccionado.

Tengo un proceso java que imprime mucho texto. A veces solo quiero ver un poco del texto. Con los programas normales solo puedo hacer:

$ myprog | head

Solo veré 10 líneas de salida de myprog y se cerrará inmediatamente. Pero con java, si lo hago:

$ java MyClass | head

Obtengo las primeras 10 líneas de salida, pero el proceso java no se cerrará hasta que haya terminado con todo su procesamiento. Es como a java no le importa que stdout (System.out) se haya ido y que el proceso principal haya muerto y se haya ido.

Todos los demás programas salen silenciosamente, como cat:

$ cat /etc/group | head root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: mail:x:8: news:x:9:

O salga con un error / excepción de tubería rota, como python:

$ python -c ''while True: print "hi"'' | head hi hi hi hi hi hi hi hi hi hi Traceback (most recent call last): File "<string>", line 1, in <module> IOError: [Errno 32] Broken pipe

¿Cómo puedo hacer que Java genere una excepción al llamar a System.out.println () cuando canalizo la salida a algo así como Head? Me encantaría poder hacer algo como:

try { while(true) { System.out.println("hi"); } } catch(BrokenPipeException e) { // exit gracefully }


estoy usando checkError()

Desde PrintStream-API-Docu :

A diferencia de otras secuencias de salida, PrintStream nunca lanza una excepción IOException; en su lugar, las situaciones excepcionales simplemente establecen un indicador interno que se puede probar a través del método checkError.

así que intenta algo como esto:

while(!System.out.checkError()) { System.out.println("hi"); }