CodeGym/Java-blogg/Tilfeldig/Java PrintStream-klasse
John Squirrels
Nivå
San Francisco

Java PrintStream-klasse

Publisert i gruppen
Hei! I dag skal vi snakke om Java PrintStream-klassen og alt den kan gjøre. Faktisk er du allerede kjent med to metoder for PrintStream- klassen. De er print() og println() , som du sannsynligvis bruker hver dag :) Fordi System.out- variabelen er et PrintStream- objekt, kaller du en av denne klassens metoder når du kaller System.out.println() .  Det generelle formålet med PrintStream- klassen er å sende informasjon til en strøm. Hvorfor vi trenger PrintStream-klassen - 1Denne klassen har flere konstruktører. Her er noen av de mest brukte:
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) kaster FileNotFoundException
  • PrintStream(String outputFileName) kaster FileNotFoundException
For eksempel kan vi sende navnet på utdatafilen til PrintStream- konstruktøren. Alternativt kan vi sende et File- objekt. La oss se på noen eksempler for å se hvordan dette fungerer:
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);

   }
}
Denne koden vil opprette en test.txt-fil på skrivebordet (hvis den ikke allerede eksisterer) og sekvensielt skrive nummeret, strengen og boolsk til den. Her er filinnholdet etter at vi har kjørt programmet:
222
Hello world!
false
Som vi sa ovenfor, trenger du ikke sende et filobjekt . Det er nok å bare sende filbanen til konstruktøren:
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);
   }
}
Denne koden gjør det samme som den forrige koden. En annen interessant metode verdt vår oppmerksomhet er printf() , som produserer utdata basert på en formatstreng. Hva er en "formatstreng"? La meg gi et eksempel:
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();
   }
}
Her, i stedet for å eksplisitt oppgi robotens navn og alder i strengen, legger vi plassholdere for denne informasjonen, representert av %s og %d . Og vi sender som argumenter dataene som vil erstatte dem. I vårt tilfelle er dette strengen " Amigo " og tallet 18. Vi kan lage en annen plassholder, si %b , og sende et nytt argument. Hvorfor trenger vi dette? Fremfor alt for større fleksibilitet. Hvis programmet krever at du viser en velkomstmelding ofte, må du manuelt skrive ut den nødvendige teksten for hver nye robot. Du kan ikke engang gjøre denne teksten til en konstant, siden alle har forskjellige navn og aldre! Men ved å bruke denne nye metoden kan du isolere hilsenen i en konstant og, om nødvendig, ganske enkelt endre argumentene som sendes til printf ()- metoden.
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();
   }
}

Erstatter System.in

I denne leksjonen vil vi "bekjempe systemet" og lære hvordan vi erstatter System.in- variabelen for å omdirigere systemutdata dit vi vil. Du glemmer kanskje hva System.in er, men ingen CodeGym-student vil noen gang glemme denne konstruksjonen:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in  (akkurat som System.out ) er en statisk variabel av System- klassen. Men i motsetning til System.out refererer den til en annen klasse, nemlig InputStream . Som standard er System.in en strøm som leser data fra en systemenhet - tastaturet. Men akkurat som med System.out kan vi erstatte tastaturet som datakilde. Vi kan lese data fra hvor vi vil! La oss se på et eksempel:
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);
       }

   }
}
Så hva gjorde vi? System.in er vanligvis bundet til tastaturet. Men vi ønsker ikke å lese data fra tastaturet: la oss få dataene lest fra en vanlig streng! Vi opprettet en streng og fikk den som en byte-array. Hvorfor trenger vi byte? Saken er at InputStream er en abstrakt klasse, så vi kan ikke lage en forekomst av den direkte. Vi må velge en av dens etterkommere. For eksempel kan vi velge ByteArrayInputStream . Det er enkelt, og navnet alene forteller oss hvordan det fungerer: datakilden er en byte-array. Så vi lager en byte-array og sender den til konstruktøren av strømmen vår som vil lese dataene. Og nå er alt klart! Nå trenger vi bare å bruke System.setIn()metode for å eksplisitt angi verdien av variabelen in . Med out , vil du huske, var det heller ikke mulig å sette variabelens verdi direkte: vi måtte bruke setOut()- metoden. Etter at vi har tilordnet vår InputStream til System.in- variabelen, ønsker vi å sjekke om vi har oppnådd formålet vårt. Vår gamle venn BufferedReader kommer oss til unnsetning her. Normalt ville denne koden ha åpnet konsollen i IntelliJ IDEA og deretter lest data du skrev inn fra tastaturet.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
Men nå når du kjører den, vil du se at strengen vår ganske enkelt vises i konsollen. Det er ingen lesing fra tastaturet. Vi byttet ut datakilden. Det er ikke lenger tastaturet, men vår streng! Så enkelt er det :) I dagens leksjon ble vi kjent med en ny klasse og utforsket et lite nytt hack for å jobbe med I/O. Nå er det på tide å gå tilbake til kurset og fullføre noen oppgaver :) Vi sees i neste leksjon!
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå