জাভা: কনসোল সাফ করুন


140

কোনও সংস্থা কি আমাকে বলতে পারেন জাভাতে পরিষ্কার পর্দার জন্য কোন কোড ব্যবহৃত হয়? উদাহরণস্বরূপ সি ++ এ

system("CLS");

পরিষ্কার স্ক্রিনের জন্য জাভাতে কোন কোড ব্যবহার করা হয়?

ধন্যবাদ!


উত্তর:


111

যেহেতু এখানে বেশ কয়েকটি উত্তর উইন্ডোজের জন্য অ-কার্যকারী কোড দেখাচ্ছে তা এখানে একটি স্পষ্টতা রয়েছে:

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

এই আদেশটি দুটি কারণে কার্যকর হয় না :

  1. উইন্ডোজ কমান্ড লাইন ইন্টারপ্রেটারে সুপরিচিত কমান্ডটি অন্তর্নিহিত থাকায় কোনও এক্সিকিউটেবলের নামকরণ করা হয়নি cls.exeবা cls.comকোনও স্ট্যান্ডার্ড উইন্ডোজ ইনস্টলেশন রয়েছে যা এর মাধ্যমে আহ্বান করতে পারে ।Runtime.execcls

  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
কেন এটি আমার জন্য কাজ করে না? আমি উইন্ডোজ সিএমডি তে প্রোগ্রামটি চালাচ্ছি তবে স্ক্রিনটি এটি পরিষ্কার হয়নি
Alist3r

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
এগুলি এএনএসআই পলায়নের কোড । বিশেষ করে স্পষ্ট পর্দা, হোম দ্বারা অনুসরণ । তবে 'বাড়ি' কেন প্রয়োজনীয়?
jdurston

2
@ জডারস্টনকে বাদ দিলে কার্সারটি উইন্ডোটির উপরে ফিরে যাবে না।
হুগো জিংক

1
Eclipse এ কাজ করে না, তবে লিনাক্স টার্মিনালে কাজ করে। আপনার জন্য একটি ভোট
আন তুয়ান

7
এটি কেবলমাত্র তখনই কার্যকর হয় যখন টার্মিনাল এমুলেটরটি জাভা চালায়, এটিএনএসআই এস্কেপ কোডগুলি সমর্থন করে। উইন্ডোজ এনটি / এক্সপি /
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
@ বেনলেগজিয়ারো এই ত্রুটিটি ঘটে যদি কোনও কারণে প্যাথ এনভায়রনমেন্ট ভেরিয়েবলের কোনও ডিরেক্টরিতে JVM দ্বারা ক্লাস কমান্ডটি খুঁজে না পাওয়া যায়। এই সমস্ত কোডটি হ'ল যথাক্রমে কমান্ড প্রম্পট বা টার্মিনাল উইন্ডোটি সাফ করার জন্য ডিফল্ট সিস্টেম কনফিগারেশনের উপর ভিত্তি করে উইন্ডোজ বা ইউনিক্স সিস্টেম কমান্ড কল করে। এটি টার্মিনাল উইন্ডো খোলার মতো এবং "কী" টাইপ করার পরে এন্টার কী অনুসরণ করা উচিত।
ডায়ান্ড্রিলিয়াক

22
clsউইন্ডোজে কোনও এক্সিকিউটেবল নেই । এটি একটি অভ্যন্তরীণ কমান্ড cmd.exe
a_horse_with_no_name

7
যেমনটি অন্যেরা বলেছিলেন, মোটেই কাজ করে না , কেবল উইন্ডোজের কোনও ক্লাই এক্সিকিউটেবল নয়, তবে সাব-প্রসেসিসের আউটপুট পুনঃনির্দেশিত হওয়ার কারণেও।
হলগার


15

এটির উপায় হ'ল একাধিক লাইনের প্রান্ত মুদ্রণ করা যেতে পারে ("print n") এবং পরিষ্কার স্ক্রিনটি অনুকরণ করতে পারে। শেষে পরিষ্কার, সর্বাধিক ইউনিক্স শেলের মধ্যে পূর্ববর্তী সামগ্রীগুলি সরিয়ে দেয় না, কেবল এটি সরিয়ে নিয়ে যায় এবং আপনি যদি নীচে স্ক্রোল তৈরি করেন তবে পূর্ববর্তী সামগ্রীটি দেখতে পাবেন।

এখানে একটি নমুনা কোড রয়েছে:

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

13
একটি দ্রুততর এই কর্ম সম্পন্ন করতে 50 একটি একক পংক্তি মুদ্রণ করা হয় \r\nএকটি একক সঙ্গে println, তার মাঝে একটি লক্ষণীয় বিলম্ব যেহেতু printlnকল।
বেন লেগিগিরো

7
কনসোলটি প্রদর্শন করতে কতগুলি লাইন কনফিগার করা হয়েছে তা আপনি কীভাবে জানবেন? বেশিরভাগ ক্ষেত্রে নিখুঁতভাবে কাজ করা, তবে সব নয়।
সাইফার

4
এটির ও যথাযথের মধ্যে সবচেয়ে বড় পার্থক্য clearহ'ল পরবর্তীকালে, নতুন আউটপুটটি পর্দার শীর্ষে থাকবে এবং নীচে নয়।
এনডিএম

5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));কাজটি আরও দ্রুত এবং আরও ভাল করবে।
হারুন

1
@AaronEsau JDK 11 দিয়ে শুরু, আপনি ব্যবহার করতে পারেনSystem.out.println(System.lineSeparator().repeat(50));
হোলগার

15

আপনি যদি আরও একটি সিস্টেম এটির স্বতন্ত্র পদ্ধতি চান তবে আপনি JLine লাইব্রেরি এবং কনসোলআরডার.ক্রিয়ারস স্ক্রিন () ব্যবহার করতে পারেন । বর্তমান পরিবেশে জেলাইন এবং এএনএসআই সমর্থিত কিনা এর বিচক্ষণ চেকটিও সম্ভবত মূল্যায়নের পক্ষে মূল্যবান।

নিম্নলিখিত কোডের মতো কিছু আমার জন্য কাজ করেছে:

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

        }
    }
}

এটি চলাকালীন, আপনি যদি প্রম্পটে 'ক্লিয়ার' টাইপ করেন তবে এটি স্ক্রিনটি সাফ করবে। নিশ্চিত হয়ে নিন যে আপনি এটিকে একটি সঠিক টার্মিনাল / কনসোল থেকে চালাচ্ছেন এবং Eclipse এ নয়।


14

আপনার ক্লাসে এই জাতীয় একটি পদ্ধতি তৈরি করুন: [যেমন @ হোলজার এখানে বলেছেন ]]

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

রানটাইম.জেটআরুনটাইম ()। এক্সিকিউটিভ (ক্লাংস) আমার এক্সপি ল্যাপটপে কাজ করে নি। এটি করেছে -

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

আশা করি এটি কার্যকর হবে


আপনি যদি শুরু করতে বাফার সূচক অবস্থান নির্ধারণ করতে পারেন তবে এটিই হবে একমাত্র সহজ পদ্ধতির
ডেভিলইনডিজুইজ

1
যদি প্রক্রিয়াটি বাধাগ্রস্ত হয় তবে আমি কল্পনা করি আপনি কিছু মুদ্রণের সাথে পিছিয়ে থাকতে দেখবেন othersআপনার আগে অপসারণ করা হবে।
ট্রেভরলাই


2

আপনি যদি ব্লুজ বা অন্য কোনও অনুরূপ সফ্টওয়্যার এ কাজ করে থাকেন তবে এটি কাজ করবে।

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

1

আপনি এর clsসাথে একটি অনুকরণ ব্যবহার করতে পারেনfor (int i = 0; i < 50; ++i) System.out.println();


2
এটি কেবল একটি ইঙ্গিত, সম্ভবত কেউ স্ক্রিনটি সাফ করতে চায়, আসলে
সরজ

@ সরজ: এবং প্রকৃতপক্ষে "স্ক্রিন সাফ করা" নিজে থেকে যথাযথ
অর্থবোধ করে

0

ব্যাকস্ল্যাশ (\ বি) এবং ক্যারেজ রিটার্ন (\ r) হিসাবে আপনাকে নিয়ন্ত্রণের অক্ষর ব্যবহার করতে হবে। এটি ডিফল্টরূপে অক্ষম হয়ে আসে তবে কনসোল ভিউ এই নিয়ন্ত্রণগুলি ব্যাখ্যা করতে পারে।

উইন্ডোজ> অগ্রাধিকার এবং রান / ডিবাগ> কনসোল এবং এটি সক্ষম করতে ASCII নিয়ন্ত্রণ বৈশিষ্ট্য ব্যাখ্যা করুন নির্বাচন করুন

Eclipse এ কনসোলের পছন্দগুলি

এই কনফিগারেশনের পরে, আপনি নিয়ন্ত্রণ ক্যারেক্টারগুলি সহ আপনার কনসোলটি পরিচালনা করতে পারেন:

- t - ট্যাব।

\ বি - ব্যাকস্পেস (একক অক্ষরের পাঠ্য বা মোছার পিছনে একটি পদক্ষেপ)।

। n - নতুন লাইন।

- r - গাড়ী ফেরত। ()

\ চ - ফর্ম ফিড।

Eclipse কনসোল পরিষ্কার অ্যানিমেশন

আরও তথ্য এখানে: https://www.eclipse.org/eclipse/news/4.14/platform.php


-2

আপনার জেএনআই ব্যবহার করা উচিত।

সবার আগে ভিজ্যুয়াল স্টুডিও ব্যবহার করে একটি .dll তৈরি করুন, সেই কল সিস্টেম ("ক্লাস") s এরপরে এই ডিডিএলটি ব্যবহার করতে জেএনআই ব্যবহার করুন।

আমি এই নিবন্ধটি দেখতে পেয়েছি যে চমৎকার:

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


এটাই আমার কাছে কাজ। জাভাতে স্ক্রিনটি সাফ করতে JNI ব্যবহার করে আমার একটি বাস্তব প্রকল্প রয়েছে।
ডেনি

হাঙ্গেরিতে আমরা বলি "উনি উড়াল দিয়ে ঝাঁকুনি দিয়ে আঘাত করেন।"
অ্যামব্রাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.