जावा: कंसोल को साफ़ करें


140

क्या कोई निकाय मुझे बता सकता है कि जावा में स्पष्ट स्क्रीन के लिए किस कोड का उपयोग किया जाता है? उदाहरण के लिए C ++ में

system("CLS");

स्पष्ट स्क्रीन के लिए जावा में किस कोड का उपयोग किया जाता है?

धन्यवाद!


जवाबों:


111

चूंकि विंडोज के लिए गैर-कार्य कोड दिखाते हुए यहां कई उत्तर हैं, इसलिए यहां एक स्पष्टीकरण है:

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

यह कमांड काम नहीं करता है, दो कारणों से:

  1. कोई निष्पादन योग्य नाम नहीं है cls.exeया cls.comएक मानक विंडोज इंस्टॉलेशन में जिसके माध्यम से लागू किया जा सकता है Runtime.exec, जैसा कि प्रसिद्ध कमांड clsविंडोज के कमांड लाइन दुभाषिया में बनाया गया है।

  2. के माध्यम से एक नई प्रक्रिया शुरू करते समय Runtime.exec, मानक आउटपुट एक पाइप पर पुनर्निर्देशित हो जाता है, जिसे आरंभ करने वाली जावा प्रक्रिया पढ़ सकती है। लेकिन जब clsकमांड का आउटपुट रीडायरेक्ट हो जाता है, तो यह कंसोल को क्लियर नहीं करता है।

इस समस्या को हल करने के लिए, हमें कमांड लाइन दुभाषिया ( cmd) को लागू करना होगा और इसे एक कमांड निष्पादित करने के लिए कहना होगा ( /c cls) जो अंतर्निहित कमांड को लागू करने की अनुमति देता है। इसके अलावा, हमें इसके आउटपुट चैनल को सीधे जावा प्रोसेस के आउटपुट चैनल से जोड़ना होगा, जो कि जावा 7 के साथ काम करना शुरू कर देता है 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();
    }
}

अब जब जावा प्रक्रिया कंसोल से जुड़ी होती है, अर्थात आउटपुट पुनर्निर्देशन के बिना कमांड लाइन से शुरू की गई है, तो यह कंसोल को साफ कर देगी।


1
मेरे लिए यह काम क्यों नहीं? मैं विंडोज़ सीएमडी पर कार्यक्रम चला रहा हूं, लेकिन स्क्रीन को साफ नहीं किया गया
अलिस्त 3

87

कमांड लाइन कंसोल को क्लियर करने के लिए आप निम्न कोड का उपयोग कर सकते हैं:

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

अधिक संदर्भ के लिए देखें: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html


2
यह सब करने के लिए जोड़ने के लिए देखभाल? यह स्ट्रिंग क्या है और क्या ऑटोफ्लश सक्षम होने पर आपको फ्लश करने की आवश्यकता है?
cossacksman

7
वे ANSI एस्केप कोड हैं । विशेष रूप से स्पष्ट स्क्रीन, उसके बाद घर । लेकिन is घर ’क्यों जरूरी है?
jdurston

2
@jdurston घर छोड़ने पर कर्सर को विंडो के शीर्ष पर वापस रीसेट नहीं किया जाएगा।
ह्यूगो जिन्क

1
एक्लिप्स में काम नहीं करता है, लेकिन लिनक्स टर्मिनल में काम करता है। एक वोट आपके लिए
Anh Tuan

7
यह केवल तभी काम करता है जब टर्मिनल एमुलेटर जिसमें जावा चलता है, एएनएसआई से बचने के कोड का समर्थन करता है। Windows NT / XP /
7/8/10

19

यह है कि मैं इसे कैसे संभालूंगा। यह विधि विंडोज ओएस केस और लिनक्स / यूनिक्स ओएस केस के लिए काम करेगी (जिसका अर्थ है कि यह मैक ओएस एक्स के लिए भी काम करता है)।

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.
    }
}

ध्यान दें कि यह विधि आम तौर पर कंसोल को साफ नहीं करेगी यदि आप आईडीई के अंदर चल रहे हैं।


10
विंडोज 8.1 पर:java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
बेन लेगिएरो

1
@BenLeggiero यह त्रुटि तब होती है जब किसी कारण से JVM द्वारा PATH पर्यावरण चर से कुछ निर्देशिका के भीतर cls कमांड नहीं मिलती है। यह सब कोड क्रमशः कमांड प्रॉम्प्ट या टर्मिनल विंडो को खाली करने के लिए डिफ़ॉल्ट सिस्टम कॉन्फ़िगरेशन के आधार पर विंडोज या यूनिक्स सिस्टम कमांड को कॉल करता है। यह बिलकुल वैसा ही होना चाहिए जैसे टर्मिनल विंडो खोलना और एंटर कुंजी के बाद "cls" टाइप करना।
डेंड्रिलिक

22
clsविंडोज में कोई निष्पादन योग्य नहीं है । यह एक आंतरिक आदेश है cmd.exe
a_horse_with_no_name

7
जैसा कि दूसरों द्वारा कहा गया है, सभी पर काम नहीं करता है , न केवल इसलिए कि विंडोज के पास निष्पादन योग्य नहीं है, बल्कि इसलिए भी कि उपप्रकारों का उत्पादन पुनर्निर्देशित हो जाता है।
होल्गर

2
यह उत्तर मेटा देखने का एक विषय भी है: meta.stackoverflow.com/questions/308950/…
फ्रीबर्ग

15

इसे प्राप्त करने का एक तरीका लाइनों के कई छोरों ("\ n") को प्रिंट कर सकता है और स्पष्ट स्क्रीन का अनुकरण कर सकता है। सबसे अंत में, यूनिक्स खोल में, पिछली सामग्री को नहीं हटाता है, केवल इसे ऊपर ले जाता है और यदि आप स्क्रॉल करते हैं तो पिछली सामग्री को देख सकते हैं।

यहाँ एक नमूना कोड है:

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

13
इसे पूरा करने का एक तेज़ तरीका एकल के \r\nसाथ 50 के एक स्ट्रिंग को प्रिंट करना है println, क्योंकि printlnकॉल के बीच ध्यान देने योग्य देरी है।
बेन लेगिएरो

7
आपको कैसे पता चलेगा कि कंसोल को प्रदर्शित करने के लिए कितनी लाइनें कॉन्फ़िगर की गई हैं? ज्यादातर मामलों में काम हो सकता है, लेकिन सभी नहीं।
साइपर

4
इस और उचित के बीच सबसे बड़ा अंतर यह clearहै कि उत्तरार्द्ध में, नया आउटपुट स्क्रीन के शीर्ष पर होगा और नीचे नहीं।
ndm13

5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));तेजी से और बेहतर काम करेंगे।
हारून एसाव

1
@AaronEsau JDK 11 के साथ शुरू, आप उपयोग कर सकते हैंSystem.out.println(System.lineSeparator().repeat(50));
Holger

15

यदि आप ऐसा करने के लिए अधिक स्वतंत्र सिस्टम चाहते हैं, तो आप JLine लाइब्रेरी और ConsoleReader.clearScreen () का उपयोग कर सकते हैं । वर्तमान परिवेश में JLine और ANSI का समर्थन किया गया है या नहीं, इसकी स्पष्ट जाँच ।

निम्नलिखित कोड की तरह कुछ मेरे लिए काम किया:

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 + "'.");

        }
    }
}

इसे चलाते समय, यदि आप प्रॉम्प्ट पर 'स्पष्ट' टाइप करते हैं, तो इससे स्क्रीन साफ ​​हो जाएगी। सुनिश्चित करें कि आप इसे एक उचित टर्मिनल / कंसोल से चलाते हैं, न कि ग्रहण में।


14

अपनी कक्षा में इस तरह से एक विधि बनाएँ: [जैसा कि @Holger ने यहां कहा ।]

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) {}
}

यह विंडोज़ के लिए कम से कम काम करता है, मैंने अभी तक लिनक्स के लिए जाँच नहीं की है। अगर कोई इसे लिनक्स के लिए जाँचता है तो कृपया मुझे बताएं कि यह काम करता है (या नहीं)।

एक वैकल्पिक विधि के रूप में इस कोड को 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

मैं आपको इस विधि का उपयोग करने की सलाह नहीं दूंगा।


1
विंडोज़ 10 के लिए अच्छी तरह से काम करता है!
गौरव

7

Runtime.getRuntime ()। Exec (cls) ने मेरे XP लैपटॉप पर काम नहीं किया। यह किया -

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

आशा है कि यह उपयोगी है


यदि आप इसे शुरू करने के लिए बफर इंडेक्स लोकेशन सेट कर सकते हैं तो यह एकमात्र आसान तरीका होगा
DevilInDisguise

1
यदि प्रक्रिया बाधित हो रही थी, तो मुझे लगता है कि आप दूसरों के सामने कुछ प्रिंट.आउट के साथ पिछड़ जाएंगे।
ट्रेवरली


2

यदि आप ब्लूज या किसी अन्य समान सॉफ्टवेयर में ऐसा कर रहे हैं तो यह काम करेगा।

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

1

आप के clsसाथ एक अनुकरण का उपयोग कर सकते हैंfor (int i = 0; i < 50; ++i) System.out.println();


2
इसका सिर्फ एक संकेत है, शायद कोई स्क्रीन को साफ करना चाहता है, वास्तव में
सर्ज

@ सरज़: और वास्तव में "स्क्रीन को साफ़ करना" अपने आप में उचित अर्थ नहीं रखता है, या तो
गोमो

0

आपको बैकस्लैश (\ b) और कैरिज रिटर्न (\ r) के रूप में नियंत्रण वर्णों का उपयोग करने की आवश्यकता है। यह डिफ़ॉल्ट रूप से अक्षम हो जाता है, लेकिन कंसोल दृश्य इन नियंत्रणों की व्याख्या कर सकता है।

विंडोज> प्राथमिकताएं और रन / डिबग> कंसोल और इसे सक्षम करने के लिए इंटरसेप्ट ASCII नियंत्रण वर्णों का चयन करें

ग्रहण में कंसोल प्राथमिकताएं

इन कॉन्फ़िगरेशन के बाद, आप अपने कंसोल को नियंत्रण वर्णों जैसे प्रबंधित कर सकते हैं:

\ t - टैब।

\ b - बैकस्पेस (पाठ में एक कदम पीछे या किसी एकल वर्ण को हटाने)।

\ n - नई पंक्ति।

\ r - गाड़ी वापसी। ()

\ f - फ़ॉर्म फ़ीड।

ग्रहण कंसोल स्पष्ट एनीमेशन

अधिक जानकारी: https://www.eclipse.org/eclipse/news/4.14/platform.php पर


-2

आपको जेएनआई का उपयोग करने की आवश्यकता है।

सबसे पहले उपयोग दृश्य स्टूडियो का उपयोग कर एक .dll, कि कॉल सिस्टम ("cls") बनाएँ। उसके बाद इस डीडीएल का उपयोग करने के लिए जेएनआई का उपयोग करें।

मुझे यह लेख अच्छा लगा।

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2


यही मेरे लिए काम है। जेएवीए में स्क्रीन को साफ़ करने के लिए मेरे पास जेएनआई का उपयोग करके एक वास्तविक परियोजना है।
डेनी

हंगरी में, हम कहते हैं "वह एक गदा के साथ मक्खी पर हमला करता है।"
अंबरीश तोथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.