专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java 17 I/O StringWriter 篇

temp10 2024-11-27 21:00:38 java教程 14 ℃ 0 评论

Java 17 I/O StringWriter 篇

本篇主要来说说 StringWriter、PrintWriter。

他们都是来自模块 java.base 中的包 java.io

Java 17 I/O StringWriter 篇

都是继承自 java.io.Writer 的子类。主要是用来做输出流。

StringWriter

在字符串缓冲区中缓存其输出的字符流,然后可用于构造字符串。 因为该类的 close 是个空方法,并没有任何的实现,所以关闭 StringWriter 无效。 可以在流关闭后调用此类中的方法,而不会生成 IOException。 多数的情况下是处理字符串的, 而不是为了存取到文件中。

该类的定义:

public class StringWriter extends Writer 

构造器

构造函数

描述

StringWriter()

使用默认的初始字符串缓冲区大小创建一个新的字符串编写器。

StringWriter(int initialSize)

使用指定的初始字符串缓冲区大小创建一个新的字符串编写器。

分别的创建方法为, 默认无参

StringWriter output = new StringWriter();

带有初始化缓存的构造函数

StringWriter output = new StringWriter(int initialSize);

StringWriter 方法

如何使用

try (StringWriter stringWriter = new StringWriter()) {
    String str = "苗子";
    stringWriter.write(str);
    stringWriter.append(',');
    CharSequence cs = "说全栈之 Java 篇。";
    stringWriter.append(cs);

    StringBuffer stringBuffer = stringWriter.getBuffer();
    System.out.println(stringBuffer);

    int i = 'A';
    stringWriter.write(i);

    String str2 = "Java I/O";
    stringWriter.write(str2, 0, 4);

    char [] c = {'A','C','V','K','O'};
    stringWriter.write(c);

    stringWriter.write(c, 1, 2);
    System.out.println(stringWriter);

} catch (Exception ex) {
    System.out.println(ex.getMessage());
}

运行查看效果:

对于该类的使用场景,主要是用于处理字符串流的处理。

PrintWriter

将对象的格式化表示打印到文本输出流。 此类实现了 PrintStream 中的所有打印方法。 它不包含写入原始字节的方法,程序应该使用未编码的字节流。

与 PrintStream 类不同,如果启用了自动刷新,它将仅在调用 println、printf 或 format 方法之一时完成,而不是在碰巧输出换行符时完成。 这些方法使用平台自己的行分隔符概念,而不是换行符。

此类中的方法从不抛出 I/O 异常,尽管它的某些构造函数可能会。 客户端可以通过调用 checkError() 来查询是否发生了任何错误。

这个类总是用字符集的默认替换字符串替换格式错误和不可映射的字符序列。 当需要对编码过程进行更多控制时,应使用 CharsetEncoder 类。

类的定义:

public class PrintWriter extends Writer

构造器

构造器

描述

PrintWriter(File file)

使用指定的文件创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(File file, String csn)

使用指定的文件和字符集创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(File file, Charset charset)

使用指定的文件和字符集对象创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(OutputStream out)

从现有的 OutputStream 创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(OutputStream out, boolean autoFlush)

从现有的 OutputStream 创建一个新的 PrintWriter。根据 autoFlush 刷新缓存区。

PrintWriter(OutputStream out, boolean autoFlush, Charset charset)

从现有的 OutputStream 创建一个新的 PrintWriter。

PrintWriter(Writer out)

创建一个新的 PrintWriter,没有自动行刷新。

PrintWriter(Writer out, boolean autoFlush)

创建一个新的 PrintWriter。

PrintWriter(String fileName)

使用指定的文件名创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(String fileName, String csn)

使用指定的文件名和字符集创建一个新的 PrintWriter,而不自动刷新行。

PrintWriter(String fileName, Charset charset)

使用指定的文件名和字符集创建一个新的 PrintWriter,而不自动刷新行。

其中 csn 是一个字符集的字符串。并且该类中有一个私有方法,根据 csn 字符串转换成对应的 Charset 字符集。

private static Charset toCharset(String csn) throws UnsupportedEncodingException
{
    Objects.requireNonNull(csn, "charsetName");
    try {
        return Charset.forName(csn);
    } catch (IllegalCharsetNameException|UnsupportedCharsetException unused) {
        throw new UnsupportedEncodingException(csn);
    }
}

方法如下:

如何使用

因为构造函数,支持 File、Writer、以及 OutputStream,并且也支持一个字符串的 file 路径。

上节说过 FileWriter 。这就使用该类进行演示。

//创建一个 FileWriter 对象
FileWriter fileWriter = new FileWriter("test1.txt");

// 创建一个 PrintWriter对象
PrintWriter printWriter = new PrintWriter(fileWriter);
PrintWriter printWriter2 = new PrintWriter(fileWriter, boolean);

当然也可以使用 OutputStream 对象

// 创建一个 FileOutputStream 对象
FileOutputStream fileOutputStream = new FileOutputStream("test2.txt");

PrintWriter printWriter1 = new PrintWriter(fileOutputStream);
PrintWriter printWriter2 = new PrintWriter(fileOutputStream, boolean);
PrintWriter printWriter3 = new PrintWriter(fileOutputStream, boolean, charset);

同样 File 对象也一样。

new PrintWriter(new File("test3.txt"));
new PrintWriter(new File("test4.txt"), "UTF-8");
new PrintWriter(new File("test5.txt"), Charset.forName("UTF-8"));

String 路径的方式也有三种方式:

new PrintWriter("test6.txt");
new PrintWriter("test7.txt", "UTF-8");
new PrintWriter("test8.txt", Charset.forName("UTF-8"));

Writer 的使用方法

对于 String 和 File 对象而言。使用方式和上面一致。不再单独演示,自己尝试一下。 才能知道遇到的问题。 实践出真知。

感谢您的阅读。关注, 点赞,收藏。



本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表