কনসোল.উইটলাইন এবং System.out.println


120

ঠিক মধ্যে প্রযুক্তিগত পার্থক্য কি console.writelineএবং System.out.println? আমি জানি যে System.out.printlnস্ট্যান্ডার্ড আউটপুট লিখেছেন তবে এটি কনসোলের মতো একই জিনিস নয়?

আমি সম্পূর্ণরূপে বুঝতে পারছি না ডকুমেন্টেশন জন্য console.writeline



6
এছাড়াও console.writeline একটি জাভা পদ্ধতি নয় (এটা .net হয়) ... কিন্তু আমি বুঝতে পারছি তুমি কি বলছি :)
robert_x44

উত্তর:


130

এখানে System.out/ .err/.in এবং ব্যবহারের মধ্যে প্রাথমিক পার্থক্য রয়েছে System.console():

  • System.console()যদি আপনার অ্যাপ্লিকেশনটি টার্মিনালে না চালানো হয় তবে তা বাতিল করে দেয় ( যদিও আপনি নিজের অ্যাপ্লিকেশনটিতে এটি পরিচালনা করতে পারেন )
  • System.console() অক্ষর প্রতিধ্বনিত না করে পাসওয়ার্ড পড়ার জন্য পদ্ধতি সরবরাহ করে
  • System.outএবং System.errডিফল্ট প্ল্যাটফর্ম এনকোডিং ব্যবহার করুন, যখন Consoleশ্রেণি আউটপুট পদ্ধতিগুলি কনসোল এনকোডিং ব্যবহার করে

এই পরবর্তী আচরণটি তাত্ক্ষণিকভাবে সুস্পষ্ট নাও হতে পারে তবে এর মতো কোড পার্থক্যটি প্রদর্শন করতে পারে:

public class ConsoleDemo {
  public static void main(String[] args) {
    String[] data = { "\u250C\u2500\u2500\u2500\u2500\u2500\u2510", 
        "\u2502Hello\u2502",
        "\u2514\u2500\u2500\u2500\u2500\u2500\u2518" };
    for (String s : data) {
      System.out.println(s);
    }
    for (String s : data) {
      System.console().writer().println(s);
    }
  }
}

আমার উইন্ডোজ এক্সপিতে উইন্ডোজ -১২২২ এর একটি সিস্টেম এনকোডিং এবং আইবিএম ৮50০-এর একটি ডিফল্ট কনসোল এনকোডিং রয়েছে, এই কোডটি লিখে ফেলবে:

???????
?Hello?
???????
┌─────┐
Hello
└─────┘

নোট করুন যে এই আচরণটি সিস্টেম এনকোডিংয়ে ভিন্ন এনকোডিংতে সেট করা কনসোল এনকোডিংয়ের উপর নির্ভর করে। এটি অনেকগুলি historicalতিহাসিক কারণে উইন্ডোজের ডিফল্ট আচরণ।


আপনি একটি টার্মিনাল না চালানোর একটি উদাহরণ পেতে পারেন?
চাও

@ রিচার্ড, আপনি যদি কোনও আইডিই থেকে রান চালান, বা আপনি যদি কোনও জিইউআই থেকে এক্সিকিউটেবল জার চালু করেন।
আইয়ুব

15

এগুলি মূলত একইরকম, যদি আপনার প্রোগ্রামটি ইন্টারেক্টিভ প্রম্পট থেকে চালিত হয় এবং আপনি স্টিডিন বা স্টাডআউট পুনঃনির্দেশ করেন না:

public class ConsoleTest {
    public static void main(String[] args) {
        System.out.println("Console is: " + System.console());
    }
}

ফলাফল স্বরূপ:

$ java ConsoleTest
Console is: java.io.Console@2747ee05
$ java ConsoleTest </dev/null
Console is: null
$ java ConsoleTest | cat
Console is: null

Consoleবিদ্যমান কারণটি হল এমন বৈশিষ্ট্যগুলি সরবরাহ করা যা নির্দিষ্ট ক্ষেত্রে কার্যকর যা আপনাকে একটি ইন্টারেক্টিভ কমান্ড লাইন থেকে চালানো হচ্ছে:

  • সুরক্ষিত পাসওয়ার্ড এন্ট্রি (ক্রস প্ল্যাটফর্ম করা কঠিন)
  • সিঙ্ক্রোনাইজেশন (একাধিক থ্রেড ইনপুট প্রম্পট করতে পারে এবং Consoleএগুলি সুন্দরভাবে সারিবদ্ধ করবে, আপনি যদি System.in/out ব্যবহার করেন তবে সমস্ত অনুরোধগুলি একই সাথে উপস্থিত হবে)।

যে পুনঃনির্দেশ উপরে লক্ষ্য করুন এমনকি এক স্ট্রীমে ফলাফল System.console()ফেরার null; আরেকটি জ্বালা হ'ল Consoleগ্রহাত্মা বা মাভেনের মতো অন্য কোনও প্রোগ্রাম থেকে তৈরি হওয়ার সময় প্রায়শই কোনও জিনিস পাওয়া যায় না ।


7

প্রথমে আমি ভয় করি আপনার প্রশ্নে কিছুটা ভুল রয়েছে। ক্লাস কনসোলে কোনও পদ্ধতি রাইটলাইন নেই। পরিবর্তে শ্রেণি কনসোল পদ্ধতি লেখক সরবরাহ করে () যা মুদ্রণ লেখককে দেয়। এই মুদ্রণ লেখকের মুদ্রণ () রয়েছে।

এখন কি পার্থক্য

System.console().writer().println("hello from console");

এবং

System.out.println("hello system out");

আপনি যদি কমান্ড লাইন থেকে আপনার অ্যাপ্লিকেশনটি চালান তবে আমার মনে হয় কোনও পার্থক্য নেই। তবে কনসোলটি যদি অনুপলব্ধ থাকে তবে System.out এখনও বিদ্যমান থাকা অবস্থায় System.console () বাতিল করে দেয়। আপনি যদি আপনার অ্যাপ্লিকেশন প্রার্থনা করেন এবং ফাইলগুলিতে STDOUT পুনর্নির্দেশ সম্পাদন করেন তবে এটি ঘটতে পারে।

আমি সবেমাত্র প্রয়োগ করেছি এমন একটি উদাহরণ এখানে।

import java.io.Console;


public class TestConsole {
    public static void main(String[] args) {
        Console console = System.console();
        System.out.println("console=" + console);
        console.writer().println("hello from console");
    }
}

কমান্ড প্রম্পট থেকে অ্যাপ্লিকেশন চালানোর সময় আমি নিম্নলিখিতটি পেয়েছি:

$ java TestConsole
console=java.io.Console@93dcd
hello from console

কিন্তু যখন আমি STDOUT ফাইল করার জন্য পুনঃনির্দেশিত করেছি ...

$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
        at TestConsole.main(TestConsole.java:8)

8 লাইন হয় console.writer().println()

এখানে / টিএমপি / পরীক্ষার সামগ্রী রয়েছে

console=null

আমি আশা করি আমার ব্যাখ্যা সাহায্য করবে।


কোডকে ব্লক হিসাবে দেখানোর জন্য, প্রতিটি লাইনে চারটি স্পেস সহ ইনডেন্ট করুন। (যদিও আমি সবেমাত্র আপনার জন্য এটি করেছি))
বোল্টক্লক

তবে একটি কনসোল.প্রিন্টফ এবং একটি কনসোল.ফর্ম্যাট রয়েছে, উভয়ই হস্তক্ষেপকারী মুদ্রণ লেখককে বের করার প্রয়োজন ছাড়াই সরাসরি লেখেন। অদ্ভুত :)
টবি ডিম্বিট 20'15

3

কোন ব্যাপার Console.writelineজাভা। এটি নেট।

কনসোল এবং স্ট্যান্ডার্ড আউট এক নয়। আপনি উল্লিখিত জাভাদোক পৃষ্ঠাটি যদি আপনি পড়ে থাকেন তবে আপনি দেখতে পাবেন যে কোনও অ্যাপ্লিকেশন কেবলমাত্র যদি কমান্ড লাইন থেকে ডেকে আনা হয় এবং আউটপুটটিকে এভাবে পুনঃনির্দেশিত না করা হয় তবেই কোনও কনসোলে অ্যাক্সেস পাওয়া যাবে an

java -jar MyApp.jar > MyApp.log

এ জাতীয় অন্যান্য মামলা সিমোনজে-র উত্তরে areাকা পড়েছে, যদিও তিনি নেই বলে এই ব্যর্থতার কথা বাদ দেন Console.writeline


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