字节打印流和字符打印流

打印流

打印流:有两种

PrintStream字节打印流

PrintWriter字符打印流

特点1:打印流不操作数据源,只能操作目的地

特点2:特有的写出方法,可以实现数据原样写出

例如:

打印:97        文件中:97

打印:true      文件中:true

特点3:特有的写出方法,可以实现自动刷新自动换行

打印一次数据  =  写出  +  换行  +  刷新

PrintStream字节打印流

字节打印流的构造方法:

public PrintStream(OutputStream/File/String)  关联 字节输出流/文件/文件路径

public PrintStream(String fileName, Charset charset)    指定字符编码

public PrintStream(OutputStreamout, boolean autoFlush)  自动刷新
public PrintStream(OutputStream out, boolean autoFlush, String encoding)    

指定字符编码且自动刷新

字节打印流的成员方法:

public void write(int b)        常规方法:规则跟之前一样,将指定的字节写出

特有方法将数据原样写出。
public void println(Xxx xx)        特有方法:打印任意数据,自动刷新,自动换行
public void print(Xxx xx)        特有方法:打印任意数据,不换行
public void printf(String format, Object... args)   特有方法:带有占位符的打印语句,不换行

字节流底层没有缓冲区,开不开自动刷新都一样。直接写出数据到文件中。

public class PrintStreamDemo1 {
    public static void main(String[] args) throws FileNotFoundException {
    /*
    字节打印流:
        构造方法
        public PrintStream(OutputStream/File/String)          关联字节输出流/文件/文件路径
        public PrintStream(String fileName, Charset charset)    指定字符编码
        public PrintStream(OutputStreamout, boolean autoFlush)  自动刷新
        public PrintStream(OutputStream out, boolean autoFlush, String encoding)    指定字符编码且自动刷新
        成员方法:
        public void write(int b)            常规方法:规则跟之前一样,将指定的字节写出
        public void println(Xxx xx)         特有方法:打印任意数据,自动刷新,自动换行
        public void print(Xxx xx)           特有方法:打印任意数据,不换行
        public void printf(String format, Object... args)   特有方法:带有占位符的打印语句,不换行
    */

        //1.创建字节打印流的对象
        PrintStream ps = new PrintStream(new FileOutputStream("myio\\a.txt"), true, Charset.forName("UTF-8"));
        //2.写出数据
        ps.println(97);//写出 + 自动刷新 + 自动换行
        ps.print(true);//true
        ps.println();
        ps.printf("%s爱上了%s","阿珍","阿强");//%s字符串的占位符
        //3.释放资源
        ps.close();
    }
}

PrintWriter字符打印流

字符打印流的构造方法:

public PrintWriter(Write/File/String)            关联字节输出流/文件/文件路径
public PrintWriter(String fileName, Charset charset)    指定字符编码
public PrintWriter(Write, boolean autoFlush)  自动刷新
public PrintWriter(Write out, boolean autoFlush, String encoding)    指定字符编码且自动刷新

字符打印流的成员方法:

public void write(int b)            常规方法:规则跟之前一样,将指定的字节写出
public void println(Xxx xx)         特有方法:打印任意数据,自动刷新,自动换行
public void print(Xxx xx)           特有方法:打印任意数据,不换行
public void printf(String format, Object... args)   特有方法:带有占位符的打印语句,不换行

字符流底层有缓冲区,想要自动刷新需要开启。

public class PrintStreamDemo3 {
    public static void main(String[] args) throws IOException {
/*
    字符打印流:
        构造方法
        public PrintWriter(Write/File/String)            关联字节输出流/文件/文件路径
        public PrintWriter(String fileName, Charset charset)    指定字符编码
        public PrintWriter(Write, boolean autoFlush)  自动刷新
        public PrintWriter(Write out, boolean autoFlush, String encoding)    指定字符编码且自动刷新
        成员方法:
        public void write(int b)            常规方法:规则跟之前一样,将指定的字节写出
        public void println(Xxx xx)         特有方法:打印任意数据,自动刷新,自动换行
        public void print(Xxx xx)           特有方法:打印任意数据,不换行
        public void printf(String format, Object... args)   特有方法:带有占位符的打印语句,不换行
    */
        
      //1.创建字符打印流的对象
        PrintWriter pw = new PrintWriter(new FileWriter("myio\\a.txt"),true);

        //2.写出数据
        pw.println("今天你终于叫我名字了,虽然叫错了,但是没关系,我马上改");
        pw.print("你好你好");
        pw.printf("%s爱上了%s","阿珍","阿强");
        //3.释放资源
        pw.close();
    }
}

public class PrintStreamDemo2 {
    public static void main(String[] args) throws FileNotFoundException {
        PrintStream ps = new PrintStream("D:\\JavaTest\\myio\\myio\\a.txt");

        //% n表示换行
        ps.printf("我叫%s %n", "阿玮");//我叫阿玮 
        ps.printf("%s喜欢%s %n", "阿珍", "阿强");//阿珍喜欢阿强 
        ps.printf("字母H的大写:%c %n", 'H');//字母H的大写:H 
        ps.printf("8>3的结果是:%b %n", 8 > 3);// 8>3的结果是:true 
        ps.printf("100的一半是:%d %n", 100 / 2);// 100的一半是:50 
        ps.printf("100的16进制数是:%x %n", 100);//100的16进制数是:64 
        ps.printf("100的8进制数是:%o %n", 100);//100的8进制数是:144 
        ps.printf("50元的书打8.5折扣是:%f元%n", 50 * 0.85);//50元的书打8.5折扣是:42.500000元
        ps.printf("计算的结果转16进制:%a %n", 50 * 0.85);//计算的结果转16进制:0x1.54p5 
        ps.printf("计算的结果转科学计数法表示:%e %n", 50 * 0.85);//计算的结果转科学计数法表示:4.250000e+01 
        ps.printf("计算的结果转成指数和浮点数,结果的长度较短的是:%g %n", 50 * 0.85);
        //计算的结果转成指数和浮点数,结果的长度较短的是:42.5000 
        ps.printf("带有百分号的符号表示法,以百分之85为例:%d%% %n", 85);
        //带有百分号的符号表示法,以百分之85为例:85% 
        ps.println("---------------------");

        double num1 = 1.0;
        ps.printf("num: %.4g %n", num1);//num: 1.000 
        ps.printf("num: %.5g %n", num1);//num: 1.0000 
        ps.printf("num: %.6g %n", num1);//num: 1.00000 

        float num2 = 1.0F;
        ps.printf("num: %.4f %n", num2);//num: 1.0000 
        ps.printf("num: %.5f %n", num2);//num: 1.00000 
        ps.printf("num: %.6f %n", num2);//num: 1.000000 
        ps.println("---------------------");

        ps.printf("数字前面带有0的表示方式:%03d %n", 7);//数字前面带有0的表示方式:007 
        ps.printf("数字前面带有0的表示方式:%04d %n", 7);//数字前面带有0的表示方式:0007 
        ps.printf("数字前面带有空格的表示方式:% 8d %n", 7);//数字前面带有空格的表示方式:       7 
        ps.printf("整数分组的效果是:%,d %n", 9989997);//整数分组的效果是:9,989,997
        ps.println("---------------------");

        //最终结果是10位,小数点后面是5位,不够在前面补空格,补满10位
        //如果实际数字小数点后面过长,但是只规定两位,会四舍五入
        //如果整数部分过长,超出规定的总长度,会以实际为准
        ps.printf("一本书的价格是:%2.5f元%n", 49.8);//一本书的价格是:49.80000元
        ps.printf("%(f%n", -76.04);//(76.040000)

        //%f,默认小数点后面7位,
        //<,表示采取跟前面一样的内容
        ps.printf("%f和%3.2f %n", 86.04, 1.789651);//86.040000和1.79 
        ps.printf("%f和%<3.2f %n", 86.04, 1.789651);//86.040000和86.04 
        ps.println("---------------------");

        Date date = new Date();
        // %t 表示时间,但是不能单独出现,要指定时间的格式
        // %tc 周二 12月 06 22:08:40 CST 2022
        // %tD 斜线隔开
        // %tF 冒号隔开(12小时制)
        // %tr 冒号隔开(24小时制)
        // %tT 冒号隔开(24小时制,带时分秒)
        ps.printf("全部日期和时间信息:%tc %n", date);//全部日期和时间信息:周日 10月 06 18:05:37 CST 2024 
        ps.printf("月/日/年格式:%tD %n", date);//月/日/年格式:10/06/24 
        ps.printf("年-月-日格式:%tF %n", date);//年-月-日格式:2024-10-06 
        ps.printf("HH:MM:SS PM格式(12时制):%tr %n", date);//HH:MM:SS PM格式(12时制):06:05:37 下午 
        ps.printf("HH:MM格式(24时制):%tR %n", date);//HH:MM格式(24时制):18:05 
        ps.printf("HH:MM:SS格式(24时制):%tT %n", date);//HH:MM:SS格式(24时制):18:05:37 

        System.out.println("---------------------");
        ps.printf("星期的简称:%ta %n", date);//星期的简称:周日 
        ps.printf("星期的全称:%tA %n", date);//星期的全称:星期日 
        ps.printf("英文月份简称:%tb %n", date);//英文月份简称:10月 
        ps.printf("英文月份全称:%tB %n", date);//英文月份全称:十月 
        ps.printf("年的前两位数字(不足两位前面补0):%tC %n", date);//年的前两位数字(不足两位前面补0):20 
        ps.printf("年的后两位数字(不足两位前面补0):%ty %n", date);//年的后两位数字(不足两位前面补0):24 
        ps.printf("一年中的第几天:%tj %n", date);//一年中的第几天:280 
        ps.printf("两位数字的月份(不足两位前面补0):%tm %n", date);//两位数字的月份(不足两位前面补0):10 
        ps.printf("两位数字的日(不足两位前面补0):%td %n", date);//两位数字的日(不足两位前面补0):06 
        ps.printf("月份的日(前面不补0):%te  %n", date);//月份的日(前面不补0):6  

        System.out.println("---------------------");
        ps.printf("两位数字24时制的小时(不足2位前面补0):%tH %n", date);//两位数字24时制的小时(不足2位前面补0):18 
        ps.printf("两位数字12时制的小时(不足2位前面补0):%tI %n", date);//两位数字12时制的小时(不足2位前面补0):06 
        ps.printf("两位数字24时制的小时(前面不补0):%tk %n", date);//两位数字24时制的小时(前面不补0):18
        ps.printf("两位数字12时制的小时(前面不补0):%tl %n", date);//两位数字12时制的小时(前面不补0):6
        ps.printf("两位数字的分钟(不足2位前面补0):%tM %n", date);//两位数字的分钟(不足2位前面补0):05 
        ps.printf("两位数字的秒(不足2位前面补0):%tS %n", date);//两位数字的秒(不足2位前面补0):37 
        ps.printf("三位数字的毫秒(不足3位前面补0):%tL %n", date);//三位数字的毫秒(不足3位前面补0):622 
        ps.printf("九位数字的毫秒数(不足9位前面补0):%tN %n", date);//九位数字的毫秒数(不足9位前面补0):622000000 
        ps.printf("小写字母的上午或下午标记(英):%tp %n", date);//小写字母的上午或下午标记(英):下午 
        ps.printf("小写字母的上午或下午标记(中):%tp %n", date);//小写字母的上午或下午标记(中):下午 
        ps.printf("相对于GMT的偏移量:%tz %n", date);//相对于GMT的偏移量:+0800 
        ps.printf("时区缩写字符串:%tZ%n", date);//时区缩写字符串:CST
        ps.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts %n", date);//1970-1-1 00:00:00 到现在所经过的秒数:1728209137
        ps.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ %n", date);//1970-1-1 00:00:00 到现在所经过的毫秒数:1728209137622

        ps.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐小玉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值