CodeGym/Java Blogu/Rastgele/Java PrintStream Sınıfı
John Squirrels
Seviye
San Francisco

Java PrintStream Sınıfı

grupta yayınlandı
MERHABA! Bugün Java PrintStream sınıfı ve yapabileceği her şey hakkında konuşacağız. Aslında, PrintStream sınıfının iki yöntemini zaten biliyorsunuz . Bunlar muhtemelen her gün kullandığınız print() ve println()' dir :) System.out değişkeni bir PrintStream nesnesi olduğu için, System.out.println() öğesini çağırdığınızda bu sınıfın yöntemlerinden birini çağırmış olursunuz .  PrintStream sınıfının genel amacı, bazı akışlara bilgi göndermektir. Neden PrintStream sınıfına ihtiyacımız var - 1Bu sınıfın birkaç kurucusu vardır. İşte en sık kullanılanlardan bazıları:
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile), FileNotFoundException'ı atar
  • PrintStream(String outputFileName), FileNotFoundException'ı atar
Örneğin, çıktı dosyasının adını PrintStream yapıcısına iletebiliriz . Alternatif olarak, bir File nesnesini iletebiliriz . Bunun nasıl çalıştığını görmek için bazı örneklere bakalım:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Main {

   public static void main(String arr[]) throws FileNotFoundException
   {
       PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));

       filePrintStream.println(222);
       filePrintStream.println("Hello world");
       filePrintStream.println(false);

   }
}
Bu kod, masaüstünde bir test.txt dosyası oluşturacak (eğer zaten mevcut değilse) ve sırayla numaramızı, dizimizi ve boolean'ımızı ona yazacaktır. Programı çalıştırdıktan sonra dosya içeriği şu şekildedir:
222
Hello world!
false
Yukarıda da söylediğimiz gibi, bir File nesnesi iletmek zorunda değilsiniz . Dosya yolunu yapıcıya iletmek yeterlidir:
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Main {

   public static void main(String arr[]) throws FileNotFoundException
   {
       PrintStream filePrintStream = new PrintStream("C:\\Users\\Username\\Desktop\\test.txt");

       filePrintStream.println(222);
       filePrintStream.println("Hello world");
       filePrintStream.println(false);
   }
}
Bu kod, önceki kodla aynı işlevi görür. Dikkatimizi çeken bir başka ilginç yöntem de , bir biçim dizgisine dayalı olarak çıktı üreten printf() yöntemidir. "Biçim dizesi" nedir? Bir örnek vereyim:
import java.io.IOException;
import java.io.PrintStream;

public class Main {

   public static void main(String[] args) throws IOException {

       PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt");

       printStream.println("Hello!");
       printStream.println("I'm a robot!");

       printStream.printf("My name is %s. I am %d!", "Amigo", 18);

       printStream.close();
   }
}
Burada, dizede robotumuzun adını ve yaşını açıkça belirtmek yerine, bu bilgi için %s ve %d ile temsil edilen yer tutucular koyuyoruz . Ve onların yerini alacak verileri argüman olarak iletiyoruz. Bizim durumumuzda bu, " Amigo " dizesi ve 18 sayısıdır. %b diyerek başka bir yer tutucu oluşturabilir ve başka bir argüman iletebiliriz. buna neden ihtiyacımız var? Her şeyden önce, daha fazla esneklik için. Programınız sık sık bir karşılama mesajı görüntülemenizi gerektiriyorsa, her yeni robot için gerekli metni manuel olarak yazmanız gerekir. Herkesin adı ve yaşı farklı olduğu için bu metni sabit bile yapamazsınız! Ancak bu yeni yöntemi kullanarak selamlamayı bir sabite ayırabilir ve gerekirse printf() yöntemine iletilen bağımsız değişkenleri değiştirebilirsiniz.
import java.io.IOException;
import java.io.PrintStream;

public class Main {

   private static final String GREETINGS_MESSAGE = "My name is %s. I am %d!";

   public static void main(String[] args) throws IOException {

       PrintStream printStream = new PrintStream("C:\\Users\\Steve\\Desktop\\test.txt");

       printStream.println("Hello!");
       printStream.println("We are robots!");


       printStream.printf(GREETINGS_MESSAGE, "Amigo", 18);
       printStream.printf(GREETINGS_MESSAGE, "R2-D2", 35);
       printStream.printf(GREETINGS_MESSAGE, "C-3PO", 35);

       printStream.close();
   }
}

System.in'in değiştirilmesi

Bu dersimizde "sistemle savaşacağız" ve sistem çıktısını istediğimiz yere yönlendirmek için System.in değişkenini nasıl değiştireceğimizi öğreneceğiz. System.in'in ne olduğunu unutabilirsiniz , ancak hiçbir CodeGym öğrencisi bu yapıyı asla unutmaz:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (tıpkı System.out gibi), System sınıfının statik bir değişkenidir . Ancak System.out'tan farklı olarak başka bir sınıfa, yani InputStream'e başvurur . Varsayılan olarak System.in , bir sistem aygıtı olan klavyeden veri okuyan bir akıştır. Ancak, tıpkı System.out'ta olduğu gibi , klavyeyi veri kaynağı olarak değiştirebiliriz. Verileri istediğimiz yerden okuyabiliriz! Bir örneğe bakalım:
import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException {

       String greetings = "Hi! My name is Amigo!\nI'm learning Java on the CodeGym website.\nOne day I will become a cool programmer!\n";
       byte[] bytes = greetings.getBytes();

       InputStream inputStream = new ByteArrayInputStream(bytes);

       System.setIn(inputStream);

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

       while ((str = reader.readLine())!= null) {

           System.out.println(str);
       }

   }
}
Peki biz ne yaptık? System.in genellikle klavyeye bağlıdır. Ancak verileri klavyeden okumak istemiyoruz: hadi verileri sıradan bir diziden okutalım! Bir dizi oluşturduk ve onu bayt dizisi olarak aldık. Neden baytlara ihtiyacımız var? Mesele şu ki, InputStream soyut bir sınıftır, dolayısıyla doğrudan bir örneğini oluşturamayız. Torunlarından birini seçmek zorundayız. Örneğin ByteArrayInputStream'i seçebiliriz . Basittir ve yalnızca adı bize nasıl çalıştığını anlatır: veri kaynağı bir bayt dizisidir. Böylece bir bayt dizisi oluşturup onu veriyi okuyacak akışımızın oluşturucusuna iletiyoruz . Ve şimdi her şey hazır! Şimdi sadece System.setIn()'i kullanmamız gerekiyor.in değişkeninin değerini açıkça ayarlama yöntemi . out ile değişkenin değerini doğrudan ayarlamak da mümkün değildi: setOut() yöntemini kullanmak zorundaydık. InputStream'imizi System.in değişkenine atadıktan sonra amacımıza ulaşıp ulaşmadığımızı kontrol etmek istiyoruz. Eski dostumuz BufferedReader burada imdadımıza yetişiyor. Normalde, bu kod IntelliJ IDEA'da konsolu açar ve ardından klavyeden girdiğiniz verileri okurdu.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

       while ((str = reader.readLine())!= null) {

           System.out.println(str);
       }
Ama şimdi çalıştırdığınızda, dizimizin konsolda basitçe görüntülendiğini göreceksiniz. Klavyeden okuma yok. Veri kaynağını değiştirdik. Artık klavye değil, bizim ipimiz! Bu kadar basit :) Bugünün dersinde yeni bir sınıf tanıdık ve I/O ile çalışmak için yeni bir hack keşfettik. Şimdi kursa dönme ve bazı görevleri tamamlama zamanı :) Bir sonraki derste görüşmek üzere!
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok