JavaRush /Java 博客 /Random-ZH /PrintStream 类的用途是什么?

PrintStream 类的用途是什么?

已在 Random-ZH 群组中发布
你好!今天我们将讨论这个类PrintStream以及它能做的一切。 PrintStream 类的用途是什么? - 1实际上,您已经熟悉了该类的两个方法PrintStream。这些是您可能每天都会使用的print()和方法:) 由于变量是一个对象,因此当您调用方法时,您正在调用该特定类的方法。 该类的一般用途是将信息输出到某个流。 这个类有几个构造函数。以下是一些最常见的: println()System.outPrintStreamSystem.out.println()PrintStream
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) throws FileNotFoundException
  • PrintStream(String outputFileName) throws FileNotFoundException
正如你所看到的,我们可以传入对象的构造函数PrintStream,例如,我们想要将数据输出到的文件的名称。或者,对象本身File。让我们通过示例来看看它是如何工作的:
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);
   }
}
此代码将在桌面上创建一个文件test.txt(如果该文件尚不存在)并按boolean顺序写入我们的数字、字符串和变量。以下是程序运行后文件的内容:

222
Hello world!
false
正如我们上面所说,没有必要传递文件对象本身File。您只需要在构造函数中指定它的路径:
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);
   }
}
此代码将执行与前一代码相同的操作。另一个有趣的方法是 ,printf()或格式化字符串输出。“格式化字符串”是什么意思?为了解释一下,我举个例子:
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\\Евгений\\Desktop\\test.txt");

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

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

       printStream.close();

   }
}
在这里,我们似乎没有在一行中明确地写下机器人的名字和年龄,而是使用指针%s和为这些信息留下“自由空间” %d。我们将应该位于这些位置的数据作为参数传递。在我们的例子中,这是字符串“ Amigo ”和数字 18。例如,我们可以创建另一个空间:比如说,%b,并传递另一个参数。它是做什么用的?首先,要增加灵活性。 如果您的程序需要频繁显示欢迎消息,您将必须为每个新机器人手动输入所需的文本。您甚至无法将此文本放入常量中:每个人的名字和年龄都不同!但是使用新方法,您可以将带有问候语的字符串输出到常量,并且如果需要,只需更改方法中的参数即可printf()
import java.io.IOException;
import java.io.PrintStream;

public class Main {

   private static final String GREETINGS_MESSAGE = "My name is %s, my age is %d!";

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

       PrintStream printStream = new PrintStream("C:\\Users\\Евгений\\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并将系统输出重定向到我们需要的地方。 PrintStream 类的用途是什么 - 2您可能已经忘记它是什么System.in,但 JavaRush 学生不会忘记这个结构:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in(like System.out) 是一个静态类变量System。但是,与 不同的是System.out,它属于不同的类,即InputStream。默认情况下System.in,这是一个从系统设备(键盘)读取数据的线程。但是,与 的情况一样System.out,我们可以替换数据源,并且读取不会从键盘发生,而是从我们需要的地方发生!让我们看一个例子:
import java.io.*;

public class Main {

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

       String greetings = "Hello! Меня зовут Амиго!\nЯ изучаю Java на сайте JavaRush.\nОднажды я стану крутым программистом!\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);
       }

   }
}
那么我们做了什么?通常System.in“绑”在键盘上。但我们不希望从键盘读取数据:让它从常规文本行读取!我们创建了一个字符串并将其作为字节数组接收。为什么我们需要字节?事实上,它InputStream是一个抽象类,我们无法创建它的实例。你必须从其继承人中选择一些阶级。例如,我们可以采取ByteArrayInputStream. 它很简单,从名字就可以清楚地看出它是如何工作的:它的数据源是一个字节数组。因此,我们创建相同的字节数组并将其传递给构造函数stream,构造函数将读取数据。其实一切都已经准备好了!现在我们只需要使用该方法System.setIn()显式地设置变量的值即可in。在 的情况下out,正如您所记得的,显然也不可能设置变量的值:您必须使用特殊的方法setOut()。在我们分配了我们创建的InputStream变量之后System.in,我们需要检查我们的想法是否有效。一位老朋友会帮助我们解决这个问题 - BufferedReader。在正常情况下,此代码将导致在 Intellij IDEa 中打开控制台,并且将从键盘输入的数据从那里读取。
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

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

           System.out.println(str);
       }
但是当你现在运行它时,你会看到程序中的文本将简单地输出到控制台,不会从键盘读取。我们改变了数据源,现在不是键盘,而是我们的字符串!它是如此简单和简单:) 在今天的讲座中,我们熟悉了一个新类,并研究了一个用于使用 I/O 的新小“技巧”​​。是时候回到课程并解决一些问题了:) 下一堂课见!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION