Java: Konsolu temizle


Yanıtlar:


111

Burada Windows için çalışmayan kodu gösteren birkaç cevap olduğundan, bir açıklama:

Runtime.getRuntime().exec("cls");

Bu komut yok değil iki nedenden dolayı, çalışır:

  1. İyi bilinen komut Windows'un komut satırı yorumlayıcısında yerleşik olduğu için, çağrılabilecek standart bir Windows kurulumunda adlandırılmış cls.exeveya yürütülebilir bir dosya yoktur .cls.comRuntime.execcls

  2. Aracılığıyla yeni bir işlem başlatırken Runtime.exec, standart çıktı, başlatılan Java işleminin okuyabileceği bir boruya yönlendirilir. Ancak clskomutun çıktısı yeniden yönlendirildiğinde, konsolu temizlemez.

Bu sorunu çözmek için, komut satırı yorumlayıcısını ( cmd) /c clsçağırmalı ve yerleşik komutları çağırmaya izin veren bir komut ( ) yürütmesini söylemeliyiz . Ayrıca, çıkış kanalını Java 7'den başlayarak çalışan Java işleminin çıkış kanalına doğrudan bağlamak zorundayız inheritIO():

import java.io.IOException;

public class CLS {
    public static void main(String... arg) throws IOException, InterruptedException {
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}

Şimdi Java işlemi bir konsola bağlandığında, yani çıkış yeniden yönlendirmesi olmayan bir komut satırından başlatıldığında, konsolu temizleyecektir.


1
Bu benim için neden işe yaramıyor? Programı Windows
CMD'de

87

Komut satırı konsolunu temizlemek için aşağıdaki kodu kullanabilirsiniz:

public static void clearScreen() {  
    System.out.print("\033[H\033[2J");  
    System.out.flush();  
}  

Daha fazla referans için şu adresi ziyaret edin: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html


2
Buna hiç eklemek ister misiniz? Bu dize nedir ve otomatik yıkama etkinleştirilmişse yıkamanız gerekir mi?
cossacksman

7
Bunlar ANSI kaçış kodlarıdır . Özellikle net ekran, ardından ev . Peki 'ev' neden gereklidir?
jdurston

2
@jdurston atlama, imleci pencerenin en üstüne geri döndürmez.
Hugo Zink

1
Eclipse'de çalışmaz, Linux terminalinde çalışır. Sizin için bir oy
Anh Tuan

7
Bu yalnızca Java'nın çalıştığı terminal öykünücüsü ANSI çıkış kodlarını destekliyorsa çalışır. Windows NT / XP /
7/8/10

19

Ben bu şekilde halledeceğim. Bu yöntem Windows işletim sistemi durumu ve Linux / Unix OS durumu (Mac OS X için de çalışır) anlamına gelir.

public final static void clearConsole()
{
    try
    {
        final String os = System.getProperty("os.name");

        if (os.contains("Windows"))
        {
            Runtime.getRuntime().exec("cls");
        }
        else
        {
            Runtime.getRuntime().exec("clear");
        }
    }
    catch (final Exception e)
    {
        //  Handle any exceptions.
    }
}

Bu yöntem genellikle unutmayın değil , bir IDE içinde çalıştırıyorsanız konsolu temizleyin.


10
Windows 8.1'de:java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
Ben Leggiero

1
@BenLeggiero Bu hata, bazı nedenlerden dolayı cls komutu PATV ortam değişkenindeki bazı dizinde JVM tarafından bulunmazsa oluşur. Tüm bu kod, sırasıyla komut istemini veya terminal penceresini temizlemek için varsayılan sistem yapılandırmasına dayalı olarak Windows veya Unix sistem komutunu çağırmaktır. Terminal penceresini açıp "cls" yazıp Enter tuşuna basmakla aynı olmalıdır.
Dyndrilliac

22
clsWindows'da yürütülebilir dosya yok . Bu içsel bir komuttur cmd.exe.
a_horse_with_no_name

7
Diğerleri tarafından söylendiği gibi , sadece Windows'un çalıştırılabilir cls'si olmadığı için değil, aynı zamanda alt işlemlerin çıktısının yeniden yönlendirildiği için de işe yaramıyor .
Holger

2
Bu cevap aynı zamanda meta bkz: meta.stackoverflow.com/questions/308950/…
Petter Friberg

15

Bunu elde etmenin bir yolu, satırların birden çok ucunu ("\ n") yazdırmak ve net ekranı simüle etmek olabilir. Sonunda, en çok unix kabuğunda, önceki içeriği kaldırmaz, sadece yukarı taşır ve aşağı kaydırırsanız önceki içeriği görebilir.

İşte bir örnek kod:

for (int i = 0; i < 50; ++i) System.out.println();

13
Bunu yapmanın daha hızlı bir yolu, çağrılar arasında fark edilir bir gecikme \r\nolduğu için tek bir 50'lik tek bir dize yazdırmaktır . printlnprintln
Ben Leggiero

7
Konsolun kaç satır görüntülemek üzere yapılandırıldığını nasıl anlarsınız? Çoğu durumda işe yarayabilir, ancak hepsi işe yaramıyor.
Cypher

4
Bu ve uygun arasındaki en büyük fark clear, ikincisinde, yeni çıktının ekranın üstünde değil altta olacağıdır.
ndm13

5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));işi daha hızlı ve daha iyi yapacak.
Aaron Esau

1
@AaronEsau JDK 11 ile başlayarak, kullanabilirsinizSystem.out.println(System.lineSeparator().repeat(50));
Holger

15

Bunu yapmanın daha sistemden bağımsız bir yolunu istiyorsanız, JLine kitaplığını ve ConsoleReader.clearScreen () yöntemini kullanabilirsiniz . JLine ve ANSI'nin mevcut ortamda desteklenip desteklenmediğinin ihtiyatlı kontrolü muhtemelen de yapmaya değer.

Aşağıdaki kod gibi bir şey benim için çalıştı:

import jline.console.ConsoleReader;

public class JLineTest
{
    public static void main(String... args)
    throws Exception
    {
        ConsoleReader r = new ConsoleReader();

        while (true)
        {
            r.println("Good morning");
            r.flush();

            String input = r.readLine("prompt>");

            if ("clear".equals(input))
                r.clearScreen();
            else if ("exit".equals(input))
                return;
            else
                System.out.println("You typed '" + input + "'.");

        }
    }
}

Bunu çalıştırdığınızda, bilgi istemine 'temizle' yazarsanız, ekran temizlenir. Eclipse'de değil, uygun bir terminalden / konsoldan çalıştırdığınızdan emin olun.


14

Bu gibi sınıfında bir yöntem oluşturun: [olarak @Holger söyledi buraya .]

public static void clrscr(){
    //Clears Screen in java
    try {
        if (System.getProperty("os.name").contains("Windows"))
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        else
            Runtime.getRuntime().exec("clear");
    } catch (IOException | InterruptedException ex) {}
}

Bu en azından windows için çalışıyor, şimdiye kadar Linux için kontrol etmedim. Eğer birisi Linux için kontrol ederse, lütfen çalışıp çalışmadığını bana bildirin

Alternatif bir yöntem olarak, bu kodu yazmaktır clrscr():

for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
    System.out.print("\b"); // Prints a backspace

Bu yöntemi kullanmanızı tavsiye etmeyeceğim.


1
Windows 10 için iyi çalışıyor!
gaurav

7

Runtime.getRuntime (). Exec (cls) XP dizüstü bilgisayarımda ÇALIŞMADI. Bu yaptı -

for(int clear = 0; clear < 1000; clear++)
  {
     System.out.println("\b") ;
  }

Umarım bu yararlıdır


arabellek dizini konumunu başlatmak için ayarlayabilirsiniz, bu en kolay yaklaşım olacaktır
DevilInDisguise

1
Süreç yarıda kesilecekse, bazı print.out öğelerinin diğerlerinden önce kaldırıldığını göreceksiniz.
TrevorLee


2

Bunu Bluej veya benzeri bir yazılımda yapıyorsanız bu işe yarar.

System.out.print('\u000C');

1

Sen bir öykünme kullanabilirsiniz clsile for (int i = 0; i < 50; ++i) System.out.println();


2
Bu sadece bir ipucu, belki birisi ekranı temizlemek istiyor, Aslında
Sarz

@Sarz: ve aslında "ekranı temizlemek" de tek başına mantıklı değil
Gyom

0

Kontrol karakterlerini ters eğik çizgi (\ b) ve satır başı (\ r) olarak kullanmanız gerekir. Varsayılan olarak devre dışıdır, ancak Konsol görünümü bu denetimleri yorumlayabilir.

Windows> Tercihler ve Çalıştır / Hata Ayıkla> Konsol'u seçin ve etkinleştirmek için ASCII kontrol karakterlerini yorumla'yı seçin

Eclipse'de konsol tercihleri

Bu yapılandırmalardan sonra, konsolunuzu aşağıdaki gibi kontrol karakterleriyle yönetebilirsiniz:

\ t - sekme.

\ b - geri tuşu (metinde geriye doğru bir adım veya tek bir karakterin silinmesi).

\ n - yeni satır.

\ r - satır başı. ()

\ f - form besleme.

tutulma konsolu net animasyon

Daha fazla bilgi için: https://www.eclipse.org/eclipse/news/4.14/platform.php


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.